1. 通过new关键字创建对象,按需调用我们所需的构造函数
Object a=newObject();
2. 通过class类的newInstance()方法
classEmpObj{private String name;publicEmpObj(){}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}}
String s= EmpObj.class.toString();
String s1= s.split(" ")[1];
Class<?> aClass= Class.forName(s1);
EmpObj emp=(EmpObj) aClass.newInstance();
System.out.println(emp);
或者
EmpObj empObj= EmpObj.class.newInstance();
System.out.println(empObj);
3. 使用构造器类的newInstance()方法
Constructor<EmpObj> constructor= EmpObj.class.getConstructor();
EmpObj emp= constructor.newInstance();
System.out.println(emp);
4. 使用clone()的手段
该方法需要在被克隆类中重新clone()方法,并且实现Cloneable接口,否则将会报错(CloneNotSupportedException)
@Overrideprotected Objectclone()throws CloneNotSupportedException{returnsuper.clone();}
EmpObj empObj=newEmpObj();
EmpObj newObj=(EmpObj) empObj.clone();
System.out.println(newObj);
5. 使用反序列化
注意:类应该先实现接口(Serializable )
// 序列化写入过程
ObjectOutputStream outputStream=newObjectOutputStream(newFileOutputStream("obj.ser"));
EmpObj empObj=newEmpObj();
outputStream.writeObject(empObj);
outputStream.close();// 反序列化读取
ObjectInputStream in=newObjectInputStream(newFileInputStream("obj.ser"));
EmpObj o=(EmpObj) in.readObject();
System.out.println(o);
完整代码
package JTang.Test2;import java.io.*;import java.lang.reflect.Constructor;import java.util.EnumMap;publicclassTestCreatObject{publicstaticvoidmain(String[] args)throws Exception{// String s = EmpObj.class.toString();// String s1 = s.split(" ")[1];////// Class<?> aClass = Class.forName(s1);// EmpObj emp = (EmpObj) aClass.newInstance();// System.out.println(emp);// EmpObj empObj = EmpObj.class.newInstance();// System.out.println(empObj);// Constructor<EmpObj> constructor = EmpObj.class.getConstructor();// EmpObj emp = constructor.newInstance();// System.out.println(emp);// EmpObj empObj = new EmpObj();// empObj.setName("zs");// EmpObj newObj = (EmpObj) empObj.clone();// System.out.println(newObj);// 序列化写入过程
ObjectOutputStream outputStream=newObjectOutputStream(newFileOutputStream("obj.ser"));
EmpObj empObj=newEmpObj();
outputStream.writeObject(empObj);
outputStream.close();// 反序列化读取
ObjectInputStream in=newObjectInputStream(newFileInputStream("obj.ser"));
EmpObj o=(EmpObj) in.readObject();
System.out.println(o);}}classEmpObjimplementsCloneable, Serializable{private String name;publicEmpObj(){}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}@Overrideprotected Objectclone()throws CloneNotSupportedException{returnsuper.clone();}}