1.获取对象的方式
1.获取对象的方式有new,反射,反序列化和克隆。
2.构造函数Constructor的调用
1.获取对象时构造函数调用示意:
方式 父类构造体是否被调用 该对象构造体是否被调用 new Y Y 反射 Y Y 反序列化 Y N 克隆 N N 2.代码
public class Animal {
public Animal() {
System.out.println("Animal Constructor called");
}
}
public class Person extends Animal implements Serializable, Cloneable{
public Person() {
System.out.println("Person Constructor called");
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
public static void main(String[] args) {
System.out.println("----------------new start");
Person person1 = new Person();
System.out.println("----------------new end\n");
System.out.println("----------------reflect start");
Class c = Person.class;
try {
Person person2 = (Person) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------------reflect end\n");
System.out.println("----------------serializable start");
//将对象写入文件
File file = new File("E://test.txt");
FileOutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;
try {
if (file.exists()) {
file.delete();
}
fileOutputStream = new FileOutputStream(file);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(person1);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (objectOutputStream != null) {
objectOutputStream.close();
objectOutputStream = null;
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fileOutputStream != null) {
fileOutputStream.close();
fileOutputStream = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 将对象从文件中读出来
FileInputStream fileInputStream = null;
ObjectInputStream objectInputStream = null;
try {
fileInputStream = new FileInputStream(file);
objectInputStream = new ObjectInputStream(fileInputStream);
Person Person3 = (Person) objectInputStream.readObject();
}catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (objectInputStream != null) {
objectInputStream.close();
objectInputStream = null;
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (fileInputStream != null) {
fileInputStream.close();
fileInputStream = null;
}
} catch (Exception e) {
e.printStackTrace();
}
if (file.exists()) {
file.delete();
}
}
System.out.println("----------------serializable end\n");
System.out.println("----------------clone start");
try {
Person person4 = (Person) person1.clone();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------------clone end\n");
}
运行结果:
----------------new start
Animal Constructor called
Person Constructor called
----------------new end
----------------reflect start
Animal Constructor called
Person Constructor called
----------------reflect end
----------------serializable start
Animal Constructor called
----------------serializable end
----------------clone start
----------------clone end