Olá pessoal. Estou estudando Java, e não entendi o que ocorre no código a seguir. Uma hora ele inicializa com zero uma variável nunca inicializada. Outra hora, dá erro de compilação.
Criei a seguinte classe:
package food;
public abstract class Fruit {
private String sabor;
private String cor;
private int madura;
public String getSabor()
{
return sabor;
}
public String getCor()
{
return cor;
}
public int getMadura()
{
return madura;
}
public void setMadura(int valor)
{
madura = valor;
}
public abstract void amadurecer();
}
E em seguida, esta:
package food;
public class Apple extends Fruit {
public void amadurecer()
{
this.setMadura(this.getMadura() + 1);
}
}
No main, criei este código:
{
Apple a = new Apple();
System.out.println(a.getMadura());
a.amadurecer();
System.out.println(a.getMadura());
//int b;
//System.out.println(b);
}
E o retorno foi:
0
1
Como pode ter retornado 0 se o valor da variável não foi inicializado em nenhum momento?
Se eu tento descomentar as linhas do MAIN, dá erro. Se o Java inicializa as variáveis com zero, porque dá erro de compilação nas linhas do ‘int b’, dentro do void main?
Variaveis de classe são inicializadas automaticamente e variáveis locais (dentro dos métodos), não.
No primeiro exemplo, madura é uma variável da classe Fruit. No segundo exemplo, b é uma variável do método main.
Mas atenção, NUNCA é uma boa prática não inicializar uma variável explicitamente!!
Se for uma variavel “membro”, valores int são inicializados com o valor 0, String com null, boolean com false e assim por diante.
Se forem variáveis locais, elas não são Inicializadas e assim você recebe uma Exception.
Como está escrito de forma bem clara em todos os textos básicos de Java desde que a linguagem foi lançada, o Java NÃO inicializa variáveis locais com zero nem com qualquer outro valor.
Beleza, valeu moçada, entendi o que estava acontecendo!!
Sim, é bem pergunta de certificação, estou estudando para isso, quando me deparei com esta dúvida não havia entendido o que estava ocorrendo, e resolvi consultar os mestres
bom primeiro parceiro vc ta chamado a variavel de instancia q tem o valor padrao como 0, e depois vc chama getmadura atraves do metodo amadurecer e incrementa + 1 e imprime certo? entao vc tem 0 1 na tela… se vc tirar o // do b dar erro pq int b é uma variavel local do metodo main entao ela deve ser inicializada… e quando vc nao dar nenhum valor para as variaveis primiticas a JVM vai acusar o erro… coloque isso int b = 0 para vc ver se na tela vai ficar assim 0 1 0.
Pelo pouco conhecimento q tenho entendi isso… no seu codigo…