/ / Inicializar variáveis ​​de membro no início da definição de classe ou no construtor? - java

Inicializar variáveis ​​de membro no início da definição de classe ou no construtor? - java

Qual é a diferença entre definindo e inicializando as variáveis ​​de membro no início da definição de classee definindo as variáveis ​​de membro primeiro e inicializando as variáveis ​​de membro no construtor?

Digamos, por exemplo:

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() {...}
}

Desde já, obrigado.

Respostas:

21 para resposta № 1

No seu exemplo, a única diferença é quando elessão inicializados. De acordo com o JLS, as variáveis ​​de instância são inicializadas antes que o construtor seja chamado. Isso pode se tornar interessante quando você tem super classes para lidar, já que a ordem de inicialização nem sempre é tão óbvia. Com isso, lembre-se de que variáveis ​​de instância "super" ainda serão inicializadas quando nenhum super construtor explícito for chamado.


7 para resposta № 2

A diferença é a ordem em que eles são inicializados / definidos.

Suas variáveis ​​de membro de classe serão declaradas / definidas antes que seu construtor seja chamado. Minha preferência pessoal é defini-los no construtor.


2 para resposta № 3

Inicialização em classe permite evitar escrever um construtor trivial.

Você precisa inicializar os membros da instância quedependem dos parâmetros do construtor dentro do construtor. Poderia ser razoável, para facilitar a leitura, se nada mais, colocar a inicialização de todos os outros membros da instância dentro do mesmo construtor.

Caso contrário, não há diferença.


0 para a resposta № 4

Normalmente, um construtor aceita argumentos e atribui esses argumentos aos campos da classe.

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