자바 생 성 대상 의 네 가지 방식

1 자바 에서 대상 을 만 드 는 네 가지 방식      1.1  new 키워드 로 대상 을 만 드 는 것 이 가장 흔 한 대상 을 만 드 는 방법 입 니 다.      1.2  반사 수단 을 사용 하여 자바. lang. Class 또는 자바. lang. reflect. constructor 류 의 new Instance () 인 스 턴 스 방법 을 호출 합 니 다.      1.3  대상 의 clone () 방법 을 호출 합 니 다.      1.4  반 직렬 화 수단 을 사용 하여 자바. io. Object InputStream 대상 을 호출 합 니 다. readObject () 방법.
    2 new 키워드 로 대상 만 들 기
       클래스 로 더 클래스 를 호출 하고 구조 함 수 를 호출 합 니 다.
    3 서열 화
       3.1 응용 장소
 
        1. 대상 을 영구적 으로 저장 하고 대상 의 바이트 순 서 를 로 컬 파일 에 저장 합 니 다.         2. 직렬 화 대상 을 통 해 네트워크 에서 대상 을 전달한다.         3. 프로 세 스 간 전달 대상 을 직렬 화 합 니 다.
     3.2 직렬 화 조건
      대상 이 속 한 클래스 는 Serializable 또는 Externalizable 인 터 페 이 스 를 실현 해 야 직렬 화 될 수 있 습 니 다.Serializable 인 터 페 이 스 를 실현 한 클래스 에 대해 그 서열 화 와 반 서열 화 는 기본 적 인 서열 화 방식 을 사용한다. Externalizable 인 터 페 이 스 는 Serializable 인 터 페 이 스 를 계승 한 인터페이스 이 고 Serializable 에 대한 인터페이스 이다.
      확장  Externalizable 인터페이스의 클래스 는 직렬 화 와 반 직렬 화 행 위 를 완전히 스스로 제어 합 니 다.       자바. io. Object OutputStream 은 대상 의 출력 흐름 을 대표 합 니 다. 그 방법 writeObject (Object obj) 는 대상 의 직렬 화 를 실현 하고 얻 은 바이트 순 서 를 목표 출력 흐름 에 기록 할 수 있 습 니 다.자바. io. Object InputStream 은 대상 의 입력 흐름 을 대표 하 며, readObject () 방법 은 원본 입력 흐름 에서
      바이트 시퀀스 를 읽 고 반 정렬 을 대상 으로 하고 되 돌려 줍 니 다.
     3.3 예시 코드      
      packagpackage cn.hnpi;
      import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
  * Serializable , Java
  * */
public class Box implements Serializable {
  /*
  * width height
  * **/
  private int width;
  private int height;
    public Box() {//        readObject      
   System.out.println(" ");
 }
   public void setWidth(int width) {
   this.width = width;
 }
   public void setHeight(int height) {
   this.height = height;
  }
   public static void writeBoxObject(){
   Box myBox1 = new Box();
   myBox1.setHeight(20);
   myBox1.setWidth(50);
   Box myBox2 = new Box();
   myBox2.setHeight(100);
   myBox2.setWidth(100);
   try {
    //1、 FileOutputStream
    FileOutputStream fos=new FileOutputStream("foo.txt");//
    //2、 ObjectOutputStream
    ObjectOutputStream oos=new ObjectOutputStream(fos);// ObjectOutputStream fos
    //3、
    oos.writeObject(myBox1);
    oos.writeObject(myBox2);
    //4、 ObjectOutputStream, FileOutputStream
    oos.close();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
 }
 public static void readBoxObject(){
  
   try {
    //1、 FileInputStream
    FileInputStream fis=new FileInputStream("foo.txt");
    //2、 ObjectInputStream
    ObjectInputStream ois=new ObjectInputStream(fis);
    //3、 , readObject stream , , ;
    Object one=ois.readObject();
    Object two=ois.readObject();
    //4、 , Object ,
    Box box1=(Box) one;
    System.out.println("height:"+box1.height+" width:"+box1.width);
    Box box2=(Box) two;
    System.out.println("height:"+box2.height+" width:"+box2.width);
    //5、 ObjectInputStream ,FileInputStream
    ois.close();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  public static void main(String... args) {
   writeBoxObject();
   readBoxObject();
  }
}

 

 4 clone
package cn.hnpi;
public class Person implements Cloneable {
 private String name;
 private int age;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 @Override
 protected Object clone() throws CloneNotSupportedException {
  // TODO Auto-generated method stub
  return super.clone();
 }
 
}
 
package cn.hnpi;
public class CloneTest {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
     Person person=new Person();
     person.setAge(20);
     person.setName(" ");
    
     try {
  Person clonePerson=(Person) person.clone();
  clonePerson.setName(" ");
  System.out.println("orignal person name="+person.getName());
  System.out.println("clone person name="+person.getName());
 } catch (CloneNotSupportedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
}
 5   
 package cn.hnpi;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ReflectTest {
 // 1、 NewInstance
 public static void createBoxObjectUsingNewInstance() {
  try {
   Box box = (Box) Class.forName("cn.hnpi.Box").newInstance();
  } catch (InstantiationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 // 2、  Constructor    
 public static void createBoxObjectUsingConstructor() {
  try {
   Constructor cs = Box.class.getConstructor(null);
   Box box2 = (Box) cs.newInstance(null);
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InstantiationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static void main(String... args) {
     createBoxObjectUsingConstructor();
     createBoxObjectUsingNewInstance();
 }
}
http://blog.csdn.net/gdx2011/archive/2011/01/12/6130493.aspx

좋은 웹페이지 즐겨찾기