Pessoal, por exemplo, eu declaro uma variável no escopo da classe, mas eu gostaria de saber qual seria a diferença em inicializar uma variável de instância no escopo da classe (não sei se esse é o nome) ou então inicializar essa mesma variável de instância declarada anteriormente em um método dessa classe na qual ela foi declarada. Há alguma diferença?
Inicializar no método, a variável ficará acessível somente dentro do método e
inicializar na classe ela fica global e pode ser acessado dentro de qualquer método.
[quote=javahunter]Inicializar no método, a variável ficará acessível somente dentro do método e
inicializar na classe ela fica global e pode ser acessado dentro de qualquer método.
[/quote]
Mas tipo, eu irei declarar a variável na classe, se eu inicializar essa variável no método, no final das contas não seria a mesma coisa que inicializar a variável na hora que eu declarei? Já que apesar de eu inicializar a variável como local (inicializar no método), eu estaria inicializando uma variável global.
A variável de instância ainda terá essa referência ao objeto que inicializei no método ou vai perder essa referência com o fim do método?
Acho que você quer saber a diferença entre:
class X {
private int a = 10; // inicializado "na classe"
private int b;
public X () {
b = 20; // inicializado "no construtor"
}
}
Se for isso, a diferença é apenas de estilo, porque na verdade o código acima é equivalente a:
class X {
private int a;
private int b;
public X () {
a = 10;
b = 20; // inicializado "no construtor"
}
}
Na verdade, há um pouco de diferença quando a inicialização requer um pedaço de código que pode lançar uma exceção, ou quando você precisa inicializar as variáveis-membro em uma determinada ordem. Se houver alguma dessas coisas, prefira inicializar no construtor ou então em um método de inicialização. Um exemplo:
class X {
public X() {
initialize();
}
private void initialize () {
a = 10;
b = 10 + a; // note que b depende de a, por isso é melhor deixar isso explícito dentro da inicialização
}
}
Mas tipo, eu irei declarar a variável na classe, se eu inicializar essa variável no método, no final das contas não seria a mesma coisa que inicializar a variável na hora que eu declarei?
R: Sim, são duas opções que vc tem. E também essa variável que vc declarou na classe poderá ser usada em outros métodos.
Já que apesar de eu inicializar a variável como local (inicializar no método), eu estaria inicializando uma variável global.
R: Sim.
A variável de instância ainda terá essa referência ao objeto que inicializei no método ou vai perder essa referência com o fim do método?
Não, porque já foi inicializada