原标题:Java 创建对象的四种方法
使用new 方式创建对象
publicstaticWorker createWorker{
returnnewWorker;
}
publicstaticWorker createWorker(String name, intage){
returnnewWorker(name, age);
}
使用反射机制
/*
* 使用反射机制,不带参数 Class 对象的 newInstance 方法
*/
publicstatic Worker createWorker1 {
Class clazz = null;
Worker worker = null;
try{
clazz = Class.forName( "com.lou.creation.Worker");
worker = (Worker) clazz.newInstance;
} catch(ClassNotFoundException e) {
e.printStackTrace;
} catch(InstantiationException e) {
e.printStackTrace;
} catch(IllegalAccessException e) {
e.printStackTrace;
}
returnworker;
}
/*
* 使用反射机制 , Constructor的 newInstance方法
*/
publicstatic Worker createWorker2 {
Worker worker = null;
try{
Class clazz = null;
clazz = Class.forName( "com.lou.creation.Worker");
// 获取不带参数的构造器
Constructor constructor= clazz.getConstructor;
// 使用构造器创建对象
worker = (Worker) constructor.newInstance;
} catch(ClassNotFoundException e) {
e.printStackTrace;
} catch(InstantiationException e) {
e.printStackTrace;
} catch(IllegalAccessException e) {
e.printStackTrace;
} catch(SecurityException e) {
e.printStackTrace;
} catch(NoSuchMethodException e) {
e.printStackTrace;
} catch(IllegalArgumentException e) {
e.printStackTrace;
} catch(InvocationTargetException e) {
e.printStackTrace;
}
returnworker;
}
/*
* 使用反射机制 : 带参数的构造函数创建新对象
*/
publicstatic Worker createWorker3(String name, Integer age) {
Worker worker = null;
try{
Class clazz = null;
clazz = Class.forName( "com.lou.creation.Worker");
// 获取不带参数的构造器
Constructor constructor= clazz.getConstructor(name.getClass,
age.getClass);
// 使用构造器创建对象
worker = (Worker) constructor.newInstance(name, age);
} catch(ClassNotFoundException e) {
e.printStackTrace;
} catch(InstantiationException e) {
e.printStackTrace;
} catch(IllegalAccessException e) {
e.printStackTrace;
} catch(SecurityException e) {
e.printStackTrace;
} catch(NoSuchMethodException e) {
e.printStackTrace;
} catch(IllegalArgumentException e) {
e.printStackTrace;
} catch(InvocationTargetException e) {
e.printStackTrace;
}
returnworker;
}
序列化和反序列化创建对象
/*
* 使用序列化和反序列化创建对象,这种方式其实是根据既有的对象进行复制,这个需要事先将可序列化的对象线存到文件里
*/
@SuppressWarnings( "resource")
publicstaticWorker createWorker4(String objectPath){
ObjectInput input = null;
Worker worker = null;
try{
input = newObjectInputStream( newFileInputStream(objectPath));
worker = (Worker) input.readObject;
} catch(FileNotFoundException e) {
e.printStackTrace;
} catch(IOException e) {
e.printStackTrace;
} catch(ClassNotFoundException e) {
e.printStackTrace;
}
returnworker;
}
/*
* 将创建的对象存入到文件内
*/
publicstaticvoidstoreObject2File(String objectPath){
Worker worker = newWorker;
ObjectOutputStream objectOutputStream;
try{
objectOutputStream = newObjectOutputStream( newFileOutputStream(
objectPath));
objectOutputStream.writeObject(worker);
} catch(FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace;
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace;
}
}
深拷贝
/*
* 使用对象的 深拷贝进行复制,创建对象
*/
publicstaticWorker createWorker5(Worker worker){
return(Worker) worker.clone;
}
worker
importjava.io.Serializable;
publicclassWorkerimplementsCloneable, Serializable{
privatestaticfinallongserialVersionUID = 1L;
privateString name;
privateintage;
publicWorker
{
this.name = "";
this.age = 0;
}
publicWorker(String name, intage)
{
this.name = name;
this.age = age;
}
publicvoidwork
{
System.out.println(name + "is working");
}
publicWorker clone
{
Worker worker = null;
try{
return(Worker) super.clone;
} catch(CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace;
}
returnworker;
}
}
参考
pdai
http://1t.click/b4eD返回搜狐,查看更多
责任编辑: