<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825594
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    在java程序中,對象可以被顯式地或者隱式地創(chuàng)建.
    下面說說四種顯式的創(chuàng)建對象的方式:
        ●  用new語句創(chuàng)建對象
        ●  運(yùn)用反射手段,調(diào)用java.lang.Class 或者 java.lang.reflect.Constructor 類的newInstance()實例方法
        ●  調(diào)用對象的clone()方法
        ●  運(yùn)用序列化手段,調(diào)用java.io.ObjectInputStream 對象的 readObject()方法.

    例子

     

    Customer.java

    package dgut.ke.javatest;

    public class Customer implements Cloneable {

     private String name;
     private int age;
     
     public Customer() {
      this("unknown",0);
      System.out.println("call default constructor");
     }
     
     public Customer(String name,int age) {
      this.name = name;
      this.age = age;
      System.out.println("call second constructor");
     }
     
     public Object clone() throws CloneNotSupportedException {
      return super.clone();
     }
     
     public boolean equals(Object o) {
      if (this == o)
       return true;
      if (! (o instanceof Customer))
       return false;
      final Customer other = (Customer) o;
      
      if (this.name.equals(other.name) && this.age == other.age)
       return true;
      else
       return false;
     }
     
     public String toString() {
      return "customer.name = "+name+" customer.age = "+age;
     }
     /**
      * @param args
      */
     public static void main(String[] args) throws Exception{
      // 運(yùn)用反射手段創(chuàng)建Customer對象
      Class objectClass = Class.forName("dgut.ke.javatest.Customer");
      Customer c1 = (Customer) objectClass.newInstance();
      System.out.println("c1 --> " + c1);
      
      //用new創(chuàng)建Customer對象
      Customer c2 = new Customer("Tom",20);
      System.out.println("c2 --> " + c2);
      
      //運(yùn)用克隆手段創(chuàng)建Customer對象
      Customer c3 = (Customer) c2.clone();
      System.out.println("c3 --> " + c3);
      System.out.println("c2 == c3 " + (c2==c3));
      System.out.println("c2.equals(c3) " + c2.equals(c3));
     }

    }

     

    Class類的forName方法

    public static Class<?> forName(String className)
    throws ClassNotFoundException
    返回與帶有給定字符串名的類或接口相關(guān)聯(lián)的 Class 對象。調(diào)用此方法等效于:
      Class.forName(className, true, currentLoader)
    
    其中 currentLoader 表示此類的定義類加載器。

    例如,以下代碼片段返回 java.lang.Thread 類的運(yùn)行時 Class 描述符。

       Class t = Class.forName("java.lang.Thread")
    

    調(diào)用 forName("X") 將導(dǎo)致名為 X 的類被初始化。

     

    參數(shù):
    className - 所需類的完全限定名。
    返回:
    具有指定名的類的 Class 對象。
    拋出:
    LinkageError - 如果鏈接失敗
    ExceptionInInitializerError - 如果此方法所激發(fā)的初始化失敗
    ClassNotFoundException - 如果找不到該類

    Object類的clone()方法

    protected Object clone()
    throws CloneNotSupportedException
    創(chuàng)建并返回此對象的一個副本。“副本”的準(zhǔn)確含義可能依賴于對象的類。一般來說,對于任何對象 x,如果表達(dá)式:
    x.clone() != x
    是正確的,則表達(dá)式:
    x.clone().getClass() == x.getClass()
    將為 true,但這些不是絕對條件。一般情況下是:
    x.clone().equals(x)
    將為 true,但這不是絕對條件。

    按照慣例,返回的對象應(yīng)該通過調(diào)用 super.clone 獲得。如果一個類及其所有的超類(Object 除外)都遵守此約定,則 x.clone().getClass() == x.getClass()

    按照慣例,此方法返回的對象應(yīng)該獨立于該對象(正被克隆的對象)。要獲得此獨立性,在 super.clone 返回對象之前,有必要對該對象的一個或多個字段進(jìn)行修改。這通常意味著要復(fù)制包含正在被克隆對象的內(nèi)部“深層結(jié)構(gòu)”的所有可變對象,并使用對副本的引用替換對這些對象的引用。如果一個類只包含基本字段或?qū)Σ蛔儗ο蟮囊茫敲赐ǔ2恍枰薷?super.clone 返回的對象中的字段。

    Object 類的 clone 方法執(zhí)行特定的克隆操作。首先,如果此對象的類不能實現(xiàn)接口 Cloneable,則會拋出 CloneNotSupportedException注意:所有的數(shù)組都被視為實現(xiàn)接口 Cloneable。否則,此方法會創(chuàng)建此對象的類的一個新實例,并像通過分配那樣,嚴(yán)格使用此對象相應(yīng)字段的內(nèi)容初始化該對象的所有字段;這些字段的內(nèi)容沒有被自我克隆。所以,此方法執(zhí)行的是該對象的“淺表復(fù)制”,而不“深層復(fù)制”操作。

    Object 類本身不實現(xiàn)接口 Cloneable,所以在類為 Object 的對象上調(diào)用 clone 方法將會導(dǎo)致在運(yùn)行時拋出異常。

     

    返回:
    此實例的一個克隆。
    拋出:
    CloneNotSupportedException - 如果對象的類不支持 Cloneable 接口,則重寫 clone 方法的子類也會拋出此異常,以指示無法克隆某個實例。
    另請參見:
    Cloneable


    posted on 2007-10-29 14:12 Ke 閱讀(1484) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲天堂2016| 亚洲av中文无码乱人伦在线播放| 人人揉揉香蕉大免费不卡| 亚洲gay片在线gv网站| 亚洲理论片在线中文字幕| 亚洲午夜久久久久久噜噜噜| 国产免费av一区二区三区| 免费人成网站在线观看10分钟| 免费国产成人α片| 亚洲韩国—中文字幕| 亚洲国产综合精品中文字幕 | 在线视频观看免费视频18| 日本黄色动图免费在线观看| 国产黄色免费观看| 国产亚洲美女精品久久久久| 亚洲色无码专区一区| 国产成+人+综合+亚洲专| 亚洲欧洲国产综合| 自怕偷自怕亚洲精品| 亚洲AV日韩AV高潮无码专区| 免费精品国偷自产在线在线| 无码人妻AV免费一区二区三区| 美女被免费网站91色| 一本久久免费视频| jizz日本免费| 国产精品美女久久久免费 | 亚洲中文字幕乱码熟女在线| 亚洲av专区无码观看精品天堂| 亚洲精品成人图区| 亚洲成a人不卡在线观看| 亚洲日本在线免费观看| 亚洲明星合成图综合区在线| 亚洲日产2021三区在线| 亚洲国产成人久久三区| 亚洲一级免费毛片| 亚洲精品美女久久久久久久| 风间由美在线亚洲一区| 特色特黄a毛片高清免费观看| 四虎影视久久久免费观看| 色婷婷综合缴情综免费观看 | 亚洲精品无码99在线观看 |