平时每次用到对象的时候都是去new,好像也没什么别的方式了。
后来查了下,java创建对象有好多种方式:
先写一个POJO;
package com.bizi.core;
public class User {
private String username = "bizi";
private String password = "pass";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1.调用构造方法创建对象:
@Test
public void testNew(){
User user = new User();
System.out.println(user.getUsername());
}
2.使用反射的方式创建对象:
@Test
public void testReflect() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class clazz = Class.forName(User.class.getName());
Object object = clazz.newInstance();
if(object instanceof User){
User user = (User)object;
System.out.println(user.getPassword());
}
}
3.使用对象的clone()的方法:
源始类需要实现Cloneable:
package com.bizi.core;
public class User implements Cloneable{
private String username = "bizi";
private String password = "pass";
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@Test
public void testClone() throws CloneNotSupportedException {
User user1 = new User();
User user2 = (User) user1.clone();
user1.setPassword("new password");
System.out.println(user2.getPassword());
}
4.使用反序列化机制:
@Test
public void testSerializable() throws IOException, ClassNotFoundException {
User user = new User();
String file = "C:/User.txt";
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File(file)));
oo.writeObject(user);
- oo.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(file)));
User newUser = (User) ois.readObject();
ois.close();
System.out.println(newUser == user);
System.out.println(newUser.getPassword());
}