Bom dia Dayson,
Quando você trabalha com arrays funciona assim:
Um array de 10 posições digamos, tem como índice para o primeiro elemento o zero, o índice do segundo elemento é 1, e assim sucessivamente até que o índice do décimo elemento seja 9. Repare que é assim porque os índices de arrays iniciam do zero e não do 1. Exemplo:
String[] elementos = new String[10];
elementos[0] = "Primeiro item";
elementos[1] = "Segundo item";
elementos[2] = "Terceiro item";
.
.
.
elementos[9] = "Décimo item";
Ou seja, para iterar neste array, o seu for precisa ter uma variável de controle iniciando do zero, que é a primeira posição do array, e indo até o tamanho dele -1, que será neste caso 10 - 1, ou seja 9, e baseado na condição do laço (i < ...), isso quer dizer que ele vai executar a lógica dentro do laço para todos elementos menos o último, porque é enquanto o valor de i for menor que 9, ou seja, quando ele for 9, não é menor, é igual, logo termina o laço:
for (int i = 0; i < elementos.length - 1; i++) {
// lógica que vc quer fazer com o array
}
Isso foi feito assim apenas por causa da vírgula que é adicionada, e ai o if abaixo serve para adicionar o último elemento (tamanho -1, que será índice 9) no StringBuilder e não colocar vírgula sobrando no final.
Deu para esclarecer?
Só tem alguns erros neste código, no construtor, o valor do parâmetro capacidade deveria ser atribuído para o atributo tamanho, senão o laço do toString não vai funcionar, já que a atributo tamanho é usado para controlar ele. Se ele for 0, como é feito no construtor, vai bater no laço e nem vai fazer nada. Mesma coisa para o if, não vai adicionar nada também.
Só para comparar, se você quisesse iterar neste array mostrando todos os elementos de uma vez só, seria um laço assim:
for (int i = 0; i < elementos.length; i++) {
System.out.println(elementos[i]);
}
Aqui queremos passar por todos os índices do array durante o laço, logo a condição fica enquanto i menor que o tamanho (que é 10), aí sim vai rodar desde i=0 até i=9, são todos menores que 10, e quando chegar em i=10, não vai rodar porque 10 não é menor que 10, é igual.
Precisando de mais alguma coisa estamos ai.
Como você está iniciando recomendo estudar bem essas estruturas e tirar todas as dúvidas, não tenho medo de postar, é vital entender bem o funcionamento de arrays, já que eles serão base para estruturas mais avançadas que você usará bastante em programação.
Abraços.