Java 객체 작성 방법

14526 단어 Java객체 만들기
때로는 다음과 같은 면접 문제를 만날 수도 있다.
Java에서 객체를 작성하는 방법은 무엇입니까?
new 이외에 자바 창설 대상은 몇 가지 방식이 있습니까?
본고는 예를 결합하여 몇 가지 자바 창설 대상을 제시하는 방법을 제시한다. 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();
    }

클래스를 사용합니다.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();
    }

클래스를 사용합니다.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();
    }
  }

}

이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기