废话不多说直接上代码,文末有总结。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("java创建对象的几种方式!");
//1.new方法
A a = new A();
a.setLongUsername("my name is HYK");
//2.newInstance()方法 [使用 Class 类的 newInstance() 使用 Constructor 类的 newInstance()][基于反射的原理,前者基于后者,后者更瘦欢迎]
A a1 = A.class.newInstance();
a1.setLongUsername("my name is HYK");
Constructor<A> constructor = A.class.getConstructor();
A a2 = constructor.newInstance();
a2.setLongUsername("my name is HYK");
//3.Clone() 方法 [要在对象上使用 clone() 方法,我们需要实现 Cloneable 并在其中override clone() 方法。]
B b = new B();
b.setPassword("31321");
B b1 = (B)b.clone();
//4.序列化与反序列化
// Serialization[序列化]
B b2 = new B();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));//该项目的相对根目录下
out.writeObject(b2);
out.close();
System.out.println("b2的序列化结果:" + out.toString());
//Deserialization
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
B b3= (B) in.readObject();
in.close();
b3.setPassword("321321321321321");
System.out.println(b3.getPassword() + ", hashcode : " + b3.hashCode());
}
}
对象1
public class A {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public boolean setLongUsername(String username){
if (username.length() < 10){
return false;
}
else{
this.username = username;
return true;
}
}
}
对象2
import java.io.Serializable;
public class B implements Cloneable, Serializable {
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public Object clone() {
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
没什么可总结的,多用几次熟悉就好了,孰能生巧。