java對象執行個體化的方式

來源:互聯網
上載者:User

標籤:The   名稱   instant   反序   uid   prot   over   sys   cti   

java對象執行個體化的方式有以下幾種:
1、使用new
2、原廠模式
3、反射
4、clone()方法
5、還原序列化方式

/**

  • 實現Cloneable和Serializable介面
  • */
    public class Book implements Cloneable, Serializable {
    private static final long serialVersionUID = 1L;

    private Integer serialNum; // 序號
    private String name; // 圖書名稱

    public Book() {
    System.out.println("預設建構函式");
    }

    public Book(Integer serialNum, String name) {
    System.out.println("帶參數建構函式");
    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
    public String toString() {
    if (name == null) {
    return "書籍屬性還未填寫";
    }

    return serialNum + " : " + name;

    }

    @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.通過new執行個體化對象public static Book newMode() {    System.out.println("============================================================");    System.out.println("通過new執行個體化對象");    Book book = new Book(1, "大道揚帆");    return book;}// 2.通過工廠方式執行個體化對象,其本質還是new,但將執行個體化的細節交給了工廠來處理,屏蔽了和業務代碼無關的功能,一定程度上實現了和業務代碼的解耦public static Book factoryMode() {    System.out.println("============================================================");    System.out.println("通過工廠方式執行個體化對象");    return BookFactory.getInstance(2, "大道揚帆");}// 3.通過反射方式執行個體化對象@SuppressWarnings("rawtypes")public static Book reflectMode() throws Exception {    System.out.println("============================================================");    System.out.println("通過反射方式執行個體化對象");    Class[] parameterTypes = new Class[] {Integer.class, String.class};    Constructor constructor = Book.class.getConstructor(parameterTypes);    Book book = (Book) constructor.newInstance(3, "大道揚帆");    return book;}// 3-1.通過反射方式執行個體化對象還有一種方式,但本質上其實和上面的一樣,但需要類本身有無參建構函式public static Book reflectAnotherMode() throws Exception {    System.out.println("============================================================");    System.out.println("通過反射方式執行個體化對象的另外一種方式");    Book book = (Book) Class.forName("instantiation.Book").newInstance();    return book;}// 4.調用已存在對象的clone()方法執行個體化對象public static Book cloneMode(Book book) throws Exception {    System.out.println("============================================================");    System.out.println("調用已存在對象的clone()方法執行個體化對象");    Book newBook = (Book) book.clone();    System.out.println("原對象和複製對象是同一個對象嗎?" + (book == newBook));    return newBook;}// 5.對象序列化後可以通過還原序列化建立對象public static Book unSerializedMode() throws Exception {    System.out.println("============================================================");    System.out.println("對象序列化後可以通過還原序列化建立對象");    Book book = new Book(5, "大道揚帆");    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("原對象和還原序列化的對象是同一個嗎?" + (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, "大道揚帆");    System.out.println(Instantiation.cloneMode(book));    System.out.println(Instantiation.unSerializedMode());}

}

看精彩玄幻世界,盡在《大道揚帆》https://book.qidian.com/info/1012993779

java對象執行個體化的方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.