Java 创建对象的四种方法

来源:互联网 发布:女性假两性畸形 知乎 编辑:程序博客网 时间:2024/06/05 20:04
package com.lou.creation;public class Client {public static void main(String[] args) {//1.使用new 方式创建对象Worker worker1 = CreateInstanceUtil.createWorker();Worker worker2 = CreateInstanceUtil.createWorker("Louis", 23);//2.使用反射机制进行创建://a.使用反射机制,不带参数 Class 對象的 newInstance() 方法Worker worker3 = CreateInstanceUtil.createWorker1();//b.使用反射機制 , Constructor的 newInstance方法 不带参数Worker worker4 = CreateInstanceUtil.createWorker2();//c.使用反射机制 :带参数的构造函数创建新对象Worker worker5 = CreateInstanceUtil.createWorker3("Louis", 23);//3. 使用序列化和反序列化 进行创建,这个实际上是对象的复原//将一个对象存入lou.dat文件内CreateInstanceUtil.storeObject2File("lou.dat");//将对象从文件取出Worker worker6 = CreateInstanceUtil.createWorker4("lou.dat");//4.利用对象的深层拷贝功能Worker worker7 = CreateInstanceUtil.createWorker5(worker1);}}


 

 

package com.lou.creation;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class CreateInstanceUtil {/* * 方式1: 直接使用new的方式,不使用参数 */public static Worker createWorker() {return new Worker();}/* * 方式2: 使用new方式,带参数 */public static Worker createWorker(String name, int age) {return new Worker(name, age);}/* * 方式3: 使用反射机制,不带参数 Class 對象的 newInstance() 方法 */public static 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();}return worker;}/* * 方式4: 使用反射機制 , Constructor的 newInstance方法 */public static 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();}return worker;}/* * 方式5: 使用反射机制 :带参数的构造函数创建新对象 */public static 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();}return worker;}/* * 方式6: 使用序列化和反序列化创建对象,这种方式其实是根据既有的对象进行复制,这个需要事先将可序列化的对象线存到文件里 */@SuppressWarnings("resource")public static Worker createWorker4(String objectPath) {ObjectInput input = null;Worker worker = null;try {input = new ObjectInputStream(new FileInputStream(objectPath));worker = (Worker) input.readObject();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return worker;}/* * 将创建的对象存入到文件内 */public static void storeObject2File(String objectPath) {Worker worker = new Worker();ObjectOutputStream objectOutputStream;try {objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectPath));objectOutputStream.writeObject(worker);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/* * 方式7, 使用对象的 深复制进行复制,创建对象 */public static Worker createWorker5(Worker worker) {return (Worker) worker.clone();}public static void main(String[] args) {}}


 

package com.lou.creation;import java.io.Serializable;public class Worker implements Cloneable,Serializable {private static final long serialVersionUID = 1L;private String name;private int age;public Worker(){this.name = "";this.age = 0;}public Worker(String name,int age){this.name = name;this.age = age;}public void work(){System.out.println(name +"is working");}public Worker clone(){Worker worker = null;try {return (Worker) super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return worker;}}


 

0 0