平时每次用到对象的时候都是去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.调用构造方法创建对象:
@Testpublic void testNew(){User user = new User();System.out.println(user.getUsername());}
2.使用反射的方式创建对象:
@Testpublic 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;}}
@Testpublic void testClone() throws CloneNotSupportedException {User user1 = new User();User user2 = (User) user1.clone();user1.setPassword("new password");System.out.println(user2.getPassword());}
4.使用反序列化机制:
@Testpublic 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());}
浙公网安备 33010602011771号