Pessoal,
Existe alguma diferença entre os três trechos de código abaixo??
[code]class Classe{
int dado = 50;
}[/code]
class Classe{
int dado;
Classe (){dado = 50};
}
[code]class Classe{
int dado;
{dado = 50;}
}[/code]
Pessoal,
Existe alguma diferença entre os três trechos de código abaixo??
[code]class Classe{
int dado = 50;
}[/code]
class Classe{
int dado;
Classe (){dado = 50};
}
[code]class Classe{
int dado;
{dado = 50;}
}[/code]
Alguém?
??
Se as classes forem só isso, não há nenhuma diferença. Se a classe tiver mais construtores (fora o default, sem parâmetros) pode dar um pouco de diferença porque você pode acabar se esquecendo de inicializar a variável “dado” nos outros construtores.
No terceiro exemplo (com o bloco de inicialização), digamos que eu serialize e depois deserialize um objeto desta classe…
O que vai acontecer com a variável dado?
E se esse bloco de inicialização não estivesse nesta classe, mas sim numa superclasse desta classe…o que aconteceria qdo o objeto fosse
deserializado? O bloco de inicialização da super classe roda tbm?
Sanei a dúvida com o seguinte código:
[code]import java.io.*;
class TesteJava{
public static void main (String args[]){
Classe1 objClasse1 = new Classe1();
Classe2 objClasse2 = new Classe2();
Classe3 objClasse3 = new Classe3();
System.out.println ("Antes de serializar: ");
objClasse1.dado = 1;
System.out.println ("Classe 1 dado " + objClasse1.dado);
System.out.println ("Classe 2 dado " + objClasse2.dado);
System.out.println ("Classe 3 dado " + objClasse3.dado);
try{
ObjectOutputStream oos1= new ObjectOutputStream ( new FileOutputStream ("obj1.ser"));
oos1.writeObject (objClasse1);
ObjectOutputStream oos2= new ObjectOutputStream ( new FileOutputStream ("obj2.ser"));
oos2.writeObject (objClasse2);
ObjectOutputStream oos3= new ObjectOutputStream ( new FileOutputStream ("obj3.ser"));
oos3.writeObject (objClasse3);
ObjectInputStream ois1 = new ObjectInputStream (new FileInputStream ("obj1.ser"));
Classe1 obj1 = (Classe1)ois1.readObject();
ObjectInputStream ois2 = new ObjectInputStream (new FileInputStream ("obj2.ser"));
Classe2 obj2 = (Classe2)ois2.readObject();
ObjectInputStream ois3 = new ObjectInputStream (new FileInputStream ("obj3.ser"));
Classe3 obj3 =(Classe3) ois3.readObject();
System.out.println ("Depois: ");
System.out.println ("Classe 1 dado : " + obj1.dado);
System.out.println ("Classe 2 dado : " + obj2.dado);
System.out.println ("Classe 3 dado : " + obj3.dado);
}
catch (Exception e){
e.printStackTrace();
System.out.println (e.getCause());
}
}
}
class Super{public int dado = 2;}
class Classe1 extends Super implements Serializable{
}
class Classe2 implements Serializable{
public int dado;
{
dado = 1;
}
}
class Classe3 implements Serializable{
public int dado;
public Classe3(){
dado = 1;
}
}
[/code]
ou seja, o seguinte trecho da classe Super : public int dado = 2; roda como se estivesse dentro do contrutor mesmo não estando.