To "declare" a variable means to state its type and name, like
int x;
To "initialize" a variable means to assign a value to it when it is declared.
int x = 3;
The term "reinitialize" has no specific formal meaning in
Java; we won't use that term at all here.
In any case: it is not true that "a variable can only be declared once." It is true that a variable cannot be declared twice in one block, so
int x;
int y;
int x; // Illegal
is illegal. It's also not legal to declare a local variable in an inner block that has the same name as a local variable already visible in an outer block:
But it is perfectly legal to declare a variable in a loop, so long as that name isn't already being used for a local variable outside the loop. For the purposes of compiling your code, a declaration in a loop counts as just one declaration; the fact that the loop executes multiple times doesn't matter.