/ / ¿Inicializar variables miembro al comienzo de la definición de clase o en el constructor? - java

¿Inicializar variables de miembros al principio de la definición de clase o en el constructor? - java

Cuál es la diferencia entre Definir e inicializar las variables miembro al comienzo de la definición de clasey definiendo las variables miembro primero e inicializando las variables miembro en el constructor?

Digamos, por ejemplo:

public class Test {
private int foo = 123;
private boolean flag = false;

public void fooMethod() {...}
}

Versus:

public class Test {
private int foo;
private boolean flag;

public Test() {
foo = 123;
flag = false;
}

public void fooMethod() {...}
}

Gracias por adelantado.

Respuestas

21 para la respuesta № 1

En su ejemplo, la única diferencia es cuandoestán inicializados Según el JLS, las variables de instancia se inicializan antes de que se llame al constructor. Esto puede volverse interesante cuando tiene superclases con las que lidiar, ya que el orden de inicialización no siempre es tan obvio. Con eso, tenga en cuenta que las variables de instancia "super" aún se inicializarán cuando no se llame a un superconstructor explícito.


7 para la respuesta № 2

La diferencia es el orden en que se inicializan / configuran.

Sus variables miembro de clase serán declaradas / establecidas antes de que se llame a su constructor. Mi preferencia personal es establecerlos en el constructor.


2 para la respuesta № 3

La inicialización en clase le permite evitar escribir un constructor trivial.

Debe inicializar miembros de instancia quedepende de los parámetros del constructor dentro del constructor. Podría ser razonable, por lo menos legible, poner la inicialización de todos los demás miembros de la instancia dentro del mismo constructor.

De lo contrario, no hay diferencia.


0 para la respuesta № 4

Por lo general, un constructor aceptará argumentos y los asignará a campos de la clase.

public Test(int foo, boolean flag)
{
this.foo = foo;
this.flag = flag;
}