前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 创建对象的四种方法

Java 创建对象的四种方法

作者头像
亦山
发布2019-05-25 09:49:13
3970
发布2019-05-25 09:49:13
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1432215

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 block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.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 block
			e.printStackTrace();
		}
		return worker;
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年01月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档