nunca antes había programado en Java, por lo que se me está haciendo un poco lidioso por la cantidad de cosas diferentes a otros lenguajes.
Antes que nada, aclarar, que en tu código lo único "raro" que no he visto en otros lenguajes es el charAt, y teniendo en consideración que sabes PHP (por tu firma) he de suponer que sabes javascript, así que esto tampoco es nuevo.
(Si te refieres a Java en general... si tiene sus cosas raras, pero tampoco tanto. Así que sigue estudiándolo, a ver si este foro se hace mas activo
)
Ahora. Como bien identificaste el error estaba en que declarabas el String dentro del for y por tanto siempre hacia un reset del valor a "" y luego almacena un carácter: Resultado final, un String con el ultimo carácter.
Respectos la accesibilidad de la variable(punto 2) tiene que ver con esto:
http://www.javawithus.com/tutorial/scope-and-lifetime-of-variablesY si lo vez por el lado de la "lógica", lo que te esta diciendo java es que si por ejemplo "text1" no tuviera caracteres entonces el String ejemplo nunca seria declarado, por tanto la variable no existirá. Para evitar este tipo de errores Java te obliga a que lo declares antes.
Respecto a tu nueva curiosidad: Esto sucede debido a que en el ciclo for haces un +=, dicho carácter de asignación lo que hace es añadir al String YA EXISTENTE un conjunto de caracteres nuevos. Por tanto, si tu no inicializaras el String previamente, entonces no tendrías un String con valores YA EXISTENTES, y por tanto, arrojara error semántico. Esto lo detecta el compilador y te arroja error.