首先定义一个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());
}
}
最后,给大家提供一下源码的下载地址,上面的代码已经够详细了,已经没多大必要下载源码了: 源码下载地址