qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java實例化類的方法

           Java中,類的實例化方法有四種途徑:

            1)使用new操作符

            2)調用Class對象的newInstance()方法

            3)調用clone()方法,對現有實例的拷貝

            4)通過ObjectInputStream的readObject()方法反序列化類

            1、ClassInstance.java

          1. import java.io.*;  
          2.    
          3.  class ClassInstance implements Cloneable, Serializable {  
          4.      private String str = "測試...";  
          5.      public void fun(){  
          6.          System.out.println(str);  
          7.      }  
          8.      public ClassInstance(String str){  
          9.          System.out.println("有參類的實例化");  
          10.          this.str += str;   
          11.      }  
          12.      public ClassInstance(){  
          13.          System.out.println("無參類的實例化");  
          14.      }  
          15.      public Object clone(){  
          16.          return this;  
          17.      }  
          18.  }

            2、ClassInstanceTest.java

          1. import java.io.*;  
          2.  import java.lang.reflect.*;  
          3.    
          4.  public class ClassInstanceTest{  
          5.      public static void main(String[] args) throws ClassNotFoundException, InstantiationException,  
          6.             IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{  
          7.          //第一種類的實例化方式 
          8.          ClassInstance ci01 = new ClassInstance("01");  
          9.          ci01.fun();  
          10.    
          11.          //第二種類的實例化方式 
          12.          ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();  
          13.          ci02.fun();  
          14.    
          15.          //第三種類的實例化方式 
          16.          ClassInstance ci03 = (ClassInstance) ci01.clone();  
          17.          ci03.fun();  
          18.    
          19.          //第四種類的實例化方式 
          20.          FileOutputStream fos = new FileOutputStream("ci.tmp");  
          21.          ObjectOutputStream oos = new ObjectOutputStream(fos);  
          22.          oos.writeObject(ci01);  
          23.          oos.close();  
          24.          fos.close();  
          25.            
          26.          FileInputStream fis = new FileInputStream("ci.tmp");  
          27.          ObjectInputStream ois = new ObjectInputStream(fis);  
          28.            
          29.          ClassInstance ci04  = (ClassInstance) ois.readObject();  
          30.          ois.close();  
          31.          fis.close();  
          32.            
          33.          ci04.fun();  
          34.          System.out.println("--------------------額外測試--------------------");  
          35.          ClassInstance ci05 = null;  
          36.          //額外的思考 在第二種類實例化的方式中有沒有一種方法實現有參數的構造方式 
          37.          //獲得類的構造信息 
          38.          Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();  
          39.          //找到我們需要的構造方法 
          40.          for(int i=0;i<ctor.length;i++ ){  
          41.              Class[] cl = ctor[i].getParameterTypes();  
          42.              if(cl.length == 1){  
          43.                  //實例化對象 
          44.                  ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});  
          45.              }  
          46.          }  
          47.          ci05.fun();  
          48.      }  
          49.  }

            3、輸出結果

          1. 有參類的實例化  
          2.  測試...01  
          3.  無參類的實例化  
          4.  測試...  
          5.  測試...01  
          6.  測試...01  
          7.  -------------------額外測試--------------------  
          8.  有參類的實例化  
          9.  測試...05

            除了這幾種情況可以實例化一個Java類對象外,隱式調用實例化也是利用了已上集中情況。例如常見的方法:

          1. public class ClassInstance{  
          2.  public ClassInstance(){  
          3.  }  
          4.      public ClassInstance getInstance(){  
          5.  return new ClassInstance();  
          6.  }  
          7.  }

            通過觀察結果,我們發現無論哪一種方式必須經過的一步---調用構造方法。無論怎樣構造函數作為初始化類的意義怎樣都不會改變。

          posted on 2012-05-25 10:15 順其自然EVO 閱讀(224) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 遂川县| 武威市| 宾阳县| 建瓯市| 阳城县| 洞头县| 拉萨市| 高要市| 靖边县| 安远县| 永吉县| 增城市| 台南市| 济南市| 电白县| 金乡县| 临高县| 封开县| 富顺县| 西林县| 德钦县| 平原县| 同江市| 灵石县| 若羌县| 宾川县| 定襄县| 龙门县| 长子县| 布尔津县| 合阳县| 石门县| 绥棱县| 渝北区| 沁水县| 兖州市| 绵阳市| 南木林县| 铁力市| 句容市| 武汉市|