romuald que name keywords etiquetas description descripcion java design-patterns

name - En Java, ¿por qué tener un bloque de código sin palabras clave, solo corchetes?



que es meta description en wordpress (4)

Estoy re-factorizando algo del código heredado, pero la decisión de diseño me dejó perplejo y no puedo averiguar los términos adecuados para buscar en Google. Mi predecesor usaría bloques como este:

public class ChildClass extends ParentClass { { inheritedVar = "someVal"; } public ChildClass(){ /* constructor exists */ } // rest of code }

¿Cuál es el punto de declarar un bloque de código sin palabra clave? No se comporta como un bloque estático, no lo creo. ¿Es una alternativa a la instalación en el constructor? ¿Tendría esto algún efecto si se utilizara una fábrica (que en este caso no lo es)? Encontré un hilo relacionado aquí sobre este suceso en C, pero el razonamiento (alcance y declaración de variable) no parecía relevante para Java.

Cualquier pensamiento o idea sobre el "por qué" de esto sería apreciado. Es bastante fácil redefinir esto, solo tengo curiosidad en este punto.


Alcance. Cualquier variable declarada en el bloque queda fuera del alcance después del bloqueo. Es útil mantener las variables con el alcance mínimo.

Además, si define una clase interna anónima, use esta sintaxis para el constructor.


Es un bloque inicializador. (Relacionado con el bloque de inicializador estático) Consulte Inicializar miembros de instancia en esta página:

http://download.oracle.com/javase/tutorial/java/javaOO/initial.html

Es una alternativa a un constructor. Podría usarlo cuando proporcione múltiples constructores sobrecargados como una forma de compartir código.

Personalmente, sin embargo, me parece mucho más claro que el constructor llame a un método de inicialización con nombre en lugar de confiar en el bloque de código anónimo. Aunque, el compilador copia el bloque de inicialización a todos los constructores detrás de escena y se podría argumentar que hay un aumento en el rendimiento similar al de una declaración de método en línea.


Se llama http://download.oracle.com/javase/tutorial/java/javaOO/initial.html .

Los bloques de inicialización para las variables de instancia se parecen a los bloques de inicialización estáticos, pero sin la palabra clave estática:

{ // whatever code is needed for initialization goes here }

El compilador de Java copia los bloques de inicialización en cada constructor. Por lo tanto, este enfoque se puede utilizar para compartir un bloque de código entre varios constructores.


Su predecesor todavía estaba aprendiendo.

Esa es la mejor explicación que probablemente obtendrás. Tal vez en un momento en el tiempo fue necesario dividir el código de esta manera. Es difícil de decir. El código debería escribirse así:

public class ChildClass extends ParentClass { public ChildClass() { inheritedVar = "someVal"; } // rest of code }

En cuanto al bloque de inicialización, su propósito ha sido dado por las otras respuestas aquí. Introduje mi respuesta como un intento de responder el "por qué", que usted solicitó. Desafortunadamente, para la respuesta real, tendría que preguntarle a su predecesor.