Fala João Paulo, beleza?
Então, pra explicar isso você precisa ter o conhecimento prévio do loop for, sem isso é complicado entender o laço aninhado mesmo.
Mas vamos lá: Imagine um for comum
for (int i = 1; i<= 10; i++) {
System.out.println(i)
}
pra esse caso a variável i será imprimida de 1 a 10, sempre pulando linha, correto?
Isso acontece porque todas as vezes que você imprime a variável i, seu loop for reinicia já com o incremento
1a vez- i = 1
2a vez i = i + 1
E por ai vai.
Para entender o laço aninhado esse conceito é muito importante por o laço externo vide
for(int i = 1; i <=10; i++){
for(int j = 0 ; j <= 10; j++) {
System.out.print( j * i)
}
}
Nesse caso o laço for externo é o da variável i, portanto o interno é o da variável j.
Pra esse caso, o laço externo é ativado uma vez onde ocorre a ativação do laço interno feito
laço externo --> ativa laço interno; nota* caso haja alguma instrução antes do laço interno, ele executará, por exemplo se pedir para imprimir alguma coisa.
A partir dai começa a rodar o laço interno.
No exemplo acima, imprime o resultado da multiplicação entre j e i.
O programa executa esse laço interno completo vide:
j = 0 && i = 1 --> 0 *1;
j = 1 && i = 1 --> 1 *1;
.
.
.
.
.
j = 10 && i = 1--> 10 *1;
E quando terminar essa ultima execução onde j = 10, volta para o laço externo, acrescendo o i por 1 dado a parte do for i++.
Então, volta a executar o laço interno mais uma vez:
j = 0 && i = 2 --> 0 * 2;
j = 1 && i = 2 --> 1 * 2;
.
.
.
.
.
j = 10 && i = 2 --> 10 * 2;
Ao executar, volta para o laço externo e acresce mais uma vez o valor de i; e por ai vai.
Espero ter dado para entender.
Abraços!