国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java創建對象的幾種方法

2019-11-26 13:26:28
字體:
來源:轉載
供稿:網友

有時候,也可能碰到這樣面試題,如:

Java創建對象有哪幾種方法?

除了new之外,java創建對象還有哪幾種方式?

本文結合例子,給出幾種Java創建對象的方法,Here we go~~~~

使用new創建

這是最常用的一種。如:

Book book = new Book();

示例如下:

package test;import java.io.Serializable;import java.util.List;/** * @author wangmengjun * */public class Book implements Serializable{  private static final long serialVersionUID = -6212470156629515269L;  /**書名*/  private String name;  /**作者*/  private List<String> authors;  /**ISBN*/  private String isbn;  /**價格*/  private float price;  public Book() {  }  /**   * @param name   * @param authors   * @param isbn   * @param price   */  public Book(String name, List<String> authors, String isbn, float price) {    this.name = name;    this.authors = authors;    this.isbn = isbn;    this.price = price;  }  /**   * @return the name   */  public String getName() {    return name;  }  /**   * @param name the name to set   */  public void setName(String name) {    this.name = name;  }  /**   * @return the authors   */  public List<String> getAuthors() {    return authors;  }  /**   * @param authors the authors to set   */  public void setAuthors(List<String> authors) {    this.authors = authors;  }  /**   * @return the isbn   */  public String getIsbn() {    return isbn;  }  /**   * @param isbn the isbn to set   */  public void setIsbn(String isbn) {    this.isbn = isbn;  }  /**   * @return the price   */  public float getPrice() {    return price;  }  /**   * @param price the price to set   */  public void setPrice(float price) {    this.price = price;  }  /* (non-Javadoc)   * @see java.lang.Object#toString()   */  @Override  public String toString() {    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="        + price + "]";  }}
    /**     * 1. 使用new創建對象     */    Book book1 = new Book();    book1.setName("Redis");    book1.setAuthors(Arrays.asList("Eric", "John"));    book1.setPrice(59.00f);    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");    System.out.println(book1);

使用object.clone()

如果要調用clone方法,那么該object需要實現Cloneable接口,并重寫clone()方法。

修改后的Book類如下:

package test;import java.io.Serializable;import java.util.List;/** * @author wangmengjun * */public class Book implements Serializable, Cloneable {  private static final long serialVersionUID = -6212470156629515269L;  /**書名*/  private String name;  /**作者*/  private List<String> authors;  /**ISBN*/  private String isbn;  /**價格*/  private float price;  public Book() {  }  /**   * @param name   * @param authors   * @param isbn   * @param price   */  public Book(String name, List<String> authors, String isbn, float price) {    this.name = name;    this.authors = authors;    this.isbn = isbn;    this.price = price;  }  /**   * @return the name   */  public String getName() {    return name;  }  /**   * @param name the name to set   */  public void setName(String name) {    this.name = name;  }  /**   * @return the authors   */  public List<String> getAuthors() {    return authors;  }  /**   * @param authors the authors to set   */  public void setAuthors(List<String> authors) {    this.authors = authors;  }  /**   * @return the isbn   */  public String getIsbn() {    return isbn;  }  /**   * @param isbn the isbn to set   */  public void setIsbn(String isbn) {    this.isbn = isbn;  }  /**   * @return the price   */  public float getPrice() {    return price;  }  /**   * @param price the price to set   */  public void setPrice(float price) {    this.price = price;  }  /* (non-Javadoc)   * @see java.lang.Object#toString()   */  @Override  public String toString() {    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="        + price + "]";  }  @Override  protected Object clone() throws CloneNotSupportedException {    return (Book) super.clone();  }}

測試代碼

    /**     * 1. 使用new創建對象     */    Book book1 = new Book();    book1.setName("Redis");    book1.setAuthors(Arrays.asList("Eric", "John"));    book1.setPrice(59.00f);    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");    System.out.println(book1);    /**     * 2. 使用clone創建對象     */    try {      Book book2 = (Book) book1.clone();      System.out.println(book2);    } catch (CloneNotSupportedException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }

使用Class.newInstance()

可以直接使用Class.forName("xxx.xx").newInstance()方法或者XXX.class.newInstance()完成。

    /**     * 3. 使用Class.newInstance();     */    try {      Book book3 = (Book) Class.forName("test.Book").newInstance();      System.out.println(book3);      book3 = Book.class.newInstance();      System.out.println(book3);    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }

使用Contructor.newInstance()

可以指定構造器來創建,如選擇第一個構造器創建;也可以指定構造函數參數類型來創建。

    /**     * 4. 使用Constructor.newInstance();     */    try {      //選擇第一個構造器創建Book      Book book4 = (Book) Book.class.getConstructors()[0].newInstance();      //Book [name=null, authors=null, isbn=null, price=0.0]      System.out.println(book4);      /**       * 調用指定構造函數創建對象       */      book4 = (Book) Book.class.getConstructor(String.class, List.class, String.class,          float.class).newInstance("New Instance Example", Arrays.asList("Wang", "Eric"),          "abc1111111-def-33333", 60.00f);      //Book [name=New Instance Example, authors=[Wang, Eric], isbn=abc1111111-def-33333, price=60.0]      System.out.println(book4);    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException        | InvocationTargetException | SecurityException | NoSuchMethodException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }

使用Class.newInstance()或者Contructor.newInstance(),其本質是一樣的,都采用了反射機制。

使用反序列化

    /**     * 5. 使用反序列化     */    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("book.dat"));        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("book.dat"));) {      oos.writeObject(book1);      Book book5 = (Book) ois.readObject();      System.out.println(book5);    } catch (IOException | ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } 

當然了,除了上述幾種方式之外,還可以使用JNI等方式來創建對象,這邊就不一一列舉了。

完整的示例代碼如下:

Book.java

package test;import java.io.Serializable;import java.util.List;/** * @author wangmengjun * */public class Book implements Serializable, Cloneable {  private static final long serialVersionUID = -6212470156629515269L;  /**書名*/  private String name;  /**作者*/  private List<String> authors;  /**ISBN*/  private String isbn;  /**價格*/  private float price;  public Book() {  }  /**   * @param name   * @param authors   * @param isbn   * @param price   */  public Book(String name, List<String> authors, String isbn, float price) {    this.name = name;    this.authors = authors;    this.isbn = isbn;    this.price = price;  }  /**   * @return the name   */  public String getName() {    return name;  }  /**   * @param name the name to set   */  public void setName(String name) {    this.name = name;  }  /**   * @return the authors   */  public List<String> getAuthors() {    return authors;  }  /**   * @param authors the authors to set   */  public void setAuthors(List<String> authors) {    this.authors = authors;  }  /**   * @return the isbn   */  public String getIsbn() {    return isbn;  }  /**   * @param isbn the isbn to set   */  public void setIsbn(String isbn) {    this.isbn = isbn;  }  /**   * @return the price   */  public float getPrice() {    return price;  }  /**   * @param price the price to set   */  public void setPrice(float price) {    this.price = price;  }  /* (non-Javadoc)   * @see java.lang.Object#toString()   */  @Override  public String toString() {    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="        + price + "]";  }  @Override  protected Object clone() throws CloneNotSupportedException {    return (Book) super.clone();  }}

CreateObjectExample.java

package test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.InvocationTargetException;import java.util.Arrays;import java.util.List;/** * @author wangmengjun * */public class CreateObjectExample {  public static void main(String[] args) {    /**     * 1. 使用new創建對象     */    Book book1 = new Book();    book1.setName("Redis");    book1.setAuthors(Arrays.asList("Eric", "John"));    book1.setPrice(59.00f);    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");    System.out.println(book1);    /**     * 2. 使用clone創建對象     */    try {      Book book2 = (Book) book1.clone();      System.out.println(book2);    } catch (CloneNotSupportedException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    /**     * 3. 使用Class.newInstance();     */    try {      Book book3 = (Book) Class.forName("test.Book").newInstance();      System.out.println(book3);      book3 = Book.class.newInstance();      System.out.println(book3);    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    /**     * 4. 使用Constructor.newInstance();     */    try {      //選擇第一個構造器創建Book      Book book4 = (Book) Book.class.getConstructors()[0].newInstance();      //Book [name=null, authors=null, isbn=null, price=0.0]      System.out.println(book4);      /**       * 調用指定構造函數創建對象       */      book4 = (Book) Book.class.getConstructor(String.class, List.class, String.class,          float.class).newInstance("New Instance Example", Arrays.asList("Wang", "Eric"),          "abc1111111-def-33333", 60.00f);      //Book [name=New Instance Example, authors=[Wang, Eric], isbn=abc1111111-def-33333, price=60.0]      System.out.println(book4);    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException        | InvocationTargetException | SecurityException | NoSuchMethodException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    /**     * 5. 使用反序列化     */    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("book.dat"));        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("book.dat"));) {      oos.writeObject(book1);      Book book5 = (Book) ois.readObject();      System.out.println(book5);    } catch (IOException | ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 社会| 辽阳市| 安吉县| 正宁县| 托克托县| 行唐县| 黄浦区| 恩平市| 台州市| 灵寿县| 永川市| 徐闻县| 霍林郭勒市| 枣强县| 乌鲁木齐市| 蛟河市| 阳谷县| 武安市| 济源市| 望都县| 固阳县| 江城| 缙云县| 大丰市| 绥中县| 东乡县| 彭泽县| 锡林郭勒盟| 大荔县| 开平市| 阜南县| 西宁市| 旺苍县| 德安县| 香格里拉县| 曲麻莱县| 辉县市| 沙雅县| 富锦市| 南陵县| 泰来县|