java对象实例化的方式
java對(duì)象實(shí)例化的方式有以下幾種:
1、使用new
2、工廠模式
3、反射
4、clone()方法
5、反序列化方式
/**
- 實(shí)現(xiàn)Cloneable和Serializable接口
-
*/
public class Book implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;private Integer serialNum; // 序列號(hào)
private String name; // 圖書(shū)名稱public Book() {
System.out.println("默認(rèn)構(gòu)造函數(shù)");
}public Book(Integer serialNum, String name) {
System.out.println("帶參數(shù)構(gòu)造函數(shù)");
this.serialNum = serialNum;
this.name = name;
}public int getSerialNum() {
return serialNum;
}
public void setSerialNum(int serialNum) {
this.serialNum = serialNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}@Override
return serialNum + " : " + name;
public String toString() {
if (name == null) {
return "書(shū)籍屬性還未填寫(xiě)";
}}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class BookFactory {
public static Book getInstance(Integer serialNum, String name) {
return new Book(serialNum, name);
}
}
public class Instantiation {
// 1.通過(guò)new實(shí)例化對(duì)象 public static Book newMode() {System.out.println("============================================================");System.out.println("通過(guò)new實(shí)例化對(duì)象");Book book = new Book(1, "大道揚(yáng)帆");return book; }// 2.通過(guò)工廠方式實(shí)例化對(duì)象,其本質(zhì)還是new,但將實(shí)例化的細(xì)節(jié)交給了工廠來(lái)處理,屏蔽了和業(yè)務(wù)代碼無(wú)關(guān)的功能,一定程度上實(shí)現(xiàn)了和業(yè)務(wù)代碼的解耦 public static Book factoryMode() {System.out.println("============================================================");System.out.println("通過(guò)工廠方式實(shí)例化對(duì)象");return BookFactory.getInstance(2, "大道揚(yáng)帆"); }// 3.通過(guò)反射方式實(shí)例化對(duì)象 @SuppressWarnings("rawtypes") public static Book reflectMode() throws Exception {System.out.println("============================================================");System.out.println("通過(guò)反射方式實(shí)例化對(duì)象");Class[] parameterTypes = new Class[] {Integer.class, String.class};Constructor constructor = Book.class.getConstructor(parameterTypes);Book book = (Book) constructor.newInstance(3, "大道揚(yáng)帆");return book; }// 3-1.通過(guò)反射方式實(shí)例化對(duì)象還有一種方式,但本質(zhì)上其實(shí)和上面的一樣,但需要類本身有無(wú)參構(gòu)造函數(shù) public static Book reflectAnotherMode() throws Exception {System.out.println("============================================================");System.out.println("通過(guò)反射方式實(shí)例化對(duì)象的另外一種方式");Book book = (Book) Class.forName("instantiation.Book").newInstance();return book; }// 4.調(diào)用已存在對(duì)象的clone()方法實(shí)例化對(duì)象 public static Book cloneMode(Book book) throws Exception {System.out.println("============================================================");System.out.println("調(diào)用已存在對(duì)象的clone()方法實(shí)例化對(duì)象");Book newBook = (Book) book.clone();System.out.println("原對(duì)象和克隆對(duì)象是同一個(gè)對(duì)象嗎?" + (book == newBook));return newBook; }// 5.對(duì)象序列化后可以通過(guò)反序列化創(chuàng)建對(duì)象 public static Book unSerializedMode() throws Exception {System.out.println("============================================================");System.out.println("對(duì)象序列化后可以通過(guò)反序列化創(chuàng)建對(duì)象");Book book = new Book(5, "大道揚(yáng)帆");ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("D:/book.obj")));objectOutputStream.writeObject(book);ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("D:/book.obj")));Book newBook = (Book) objectInputStream.readObject();System.out.println("原對(duì)象和反序列化的對(duì)象是同一個(gè)嗎?" + (book == newBook));return newBook; }public static void main(String[] args) throws Exception {System.out.println(Instantiation.newMode());System.out.println(Instantiation.factoryMode());System.out.println(Instantiation.reflectMode());System.out.println(Instantiation.reflectAnotherMode());Book book = new Book(4, "大道揚(yáng)帆");System.out.println(Instantiation.cloneMode(book));System.out.println(Instantiation.unSerializedMode()); }}
看精彩玄幻世界,盡在《大道揚(yáng)帆》https://book.qidian.com/info/1012993779
轉(zhuǎn)載于:https://blog.51cto.com/13855604/2170171
總結(jié)
以上是生活随笔為你收集整理的java对象实例化的方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL5.6二进制软件包编译安装详解
- 下一篇: [SDOI2009]Bill的挑战——全