首先定義一個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());
}
}
最後,給大家提供一下源碼的下載地址,上面的代碼已經夠詳細了,已經沒多大必要下載源碼了: 源碼下載地址