java创建对象的五种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Steven_sf/article/details/85275256

首先定义一个Bean对象,我这里定义了3个,因为后面两个分别为了测试clone和反序列化单独定义的。

public class Bean {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

public class BeanClone implements Cloneable{
	
	private String name;

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
}

public class DeserializeBean implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	private String name;

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
}

下面是五种方法的详细代码:
package com.steven.cn;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.logging.Logger;

/**
 * 
 * @ClassName: CreateBeanMethods 
 * @Description: 创建对象的方法类
 * @author: Stevnen_sf
 * @date: 2018年12月27日 上午10:20:40
 */
public class CreateBeanMethods {
	
	private CreateBeanMethods() {}
	private static Logger logger = Logger.getLogger("CreateBeanMethods");
	
	/**
	 * 
	 * @Title: newMethod 
	 * @Description: 关键字new
	 * @return
	 * @return: Bean
	 */
	public static Bean newMethod() {
		return new Bean();
	}
	
	/**
	 * 
	 * @Title: newInstanceMethod 
	 * @Description: 类的newInstance()方法
	 * @return
	 * @return: Bean
	 */
	public static Bean newInstanceMethod() {
		Bean bean = null;
		try {
			bean = Bean.class.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			logger.info(e.getMessage());
		}
		return bean;
	}
	
	/**
	 * 
	 * @Title: constructorNewInstanceMethod 
	 * @Description: 构造器Constructor的newInstance()方法
	 * @return
	 * @return: Bean
	 */
	public static Bean constructorNewInstanceMethod() {
		Bean bean = null;
		try {
			Constructor<Bean> constructor = Bean.class.getConstructor();
			bean = constructor.newInstance();
		} catch (Exception e) {
			logger.info(e.getMessage());
		}
		return bean;
	}

	/**
	 * 
	 * @Title: cloneMethod 
	 * @Description: 使用clone()方法,需要先实现Cloneable接口,并自定义clone()方法
	 * @return
	 * @return: BeanClone
	 */
	public static BeanClone cloneMethod() {
		BeanClone bean = new BeanClone();
		BeanClone beanClone = null;
		try {
			beanClone = (BeanClone) bean.clone();
		} catch (CloneNotSupportedException e) {
			logger.info(e.getMessage());
		}
		return beanClone;
	}
	
	/**
	 * 
	 * @Title: deserializeMethod 
	 * @Description: 反序列化 :这个方法比较麻烦,不经常用
	 * @return
	 * @return: DeserializeBean
	 */
	public static DeserializeBean deserializeMethod() {
		String tempFile = "temp.txt";
		DeserializeBean object = new DeserializeBean();
		DeserializeBean deserializeBean = null;
		try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File(tempFile)));
				ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(tempFile)))) {
			out.writeObject(object);
			out.flush();
			deserializeBean = (DeserializeBean) in.readObject();
			
		} catch (Exception e) {
			logger.info(e.getMessage());
		}
		deleteTemp(tempFile);
		return deserializeBean;
	}
	
	/**
	 * 
	 * @Title: deleteTemp 
	 * @Description: 删除序列化的临时文件
	 * @param filePath
	 * @return: void
	 */
	private static void deleteTemp(String filePath) {
		File file = new File(filePath);
		try {
			Path path = file.toPath();
			Files.delete(path);
		}catch(IOException e) {
			logger.info(e.getMessage());
		}
	}
}

最后是主方法的运行结果:
public class Main {
	
	public static void main(String[] args) {
		// 第一种方法 Bean
		System.out.println("第一种方法:" + CreateBeanMethods.newMethod().getClass().getSimpleName());
		
		// 第二种方法 Bean
		System.out.println("第二种方法:" + CreateBeanMethods.newInstanceMethod().getClass().getSimpleName());
		
		// 第三种方法 Bean
		System.out.println("第三种方法:" + CreateBeanMethods.constructorNewInstanceMethod().getClass().getSimpleName());
		
		// 第四种方法 BeanClone
		System.out.println("第四种方法:" + CreateBeanMethods.cloneMethod().getClass().getSimpleName());
		
		// 第五种方法 DeserializeBean
		System.out.println("第五种方法:" + CreateBeanMethods.deserializeMethod().getClass().getSimpleName());
	}
}

运行结果


最后,给大家提供一下源码的下载地址,上面的代码已经够详细了,已经没多大必要下载源码了: [源码下载地址](https://download.csdn.net/download/steven_sf/10880186)

猜你喜欢

转载自blog.csdn.net/Steven_sf/article/details/85275256