轉載:Java中對象的生命週期

(1) 對象生命週期的開始java

             對象生命週期開始時,須要爲對象分配內存(在內存運行時數據區的堆區中爲對象分配內存),而且初始化它的實例變量;函數

           對象生命週期結束ui

             Java虛擬機的垃圾回收線程回收對象的內存,通常只要Java程序中沒有變量引用某個對象,該對象的生命週期結束,所以能夠經過控制變量的生命週期來控制對象的生命週期。this

 

  (2) 建立一個對象指建立一個類的實例,前提是類被初始化,對象能夠被顯式或者隱式建立,顯式建立對象有如下幾種方式spa

           a. new語句建立對象.net

           b.利用反射機制,調用java.lang.Class的forName()(獲得java.lang.Class對象的實例)和java.lang.reflect.Constructor的newInstance()方法(獲得該類的對象的實例)命令行

             

[java] view plaincopy線程

  1. Class objClass = Class.forName("Customer");  orm

  2. Customer c = (Customer)objClass.newInstance();  對象

           c.調用對象的clone()方法(clone()方法沒有調用構造函數,建立一個複製的對象,屬性與原對象徹底相同,保存在不一樣的內存地址中)

           d.運用反序列化方法,調用java.io.ObjectInputStream類的readObject()方法

  (3)使用new或者反射的方法時,會執行類的構造函數,使用對象的clone方法,不會調用構造函數。

  (4)關於clone()

          a. Object類中聲明爲protected類型,若是Object的子類想對外公開clone()方法,須要擴大訪問權限;

          b. 使用clone()方法須要實現Cloneable接口;

          c.調用clone()方法會建立一個複製的對象,這個對象和原來的對象具備不一樣的內存地址,可是他們的屬性值相同;

  (5)隱式地建立對象

          a. java命令的命令行參數

          b. String類型的直接數對應一個String對象

          c. 字符串操做符「+」結果爲一個新的String對象

          d. JVM加載類時,建立的Class類型的對象

  (6)建立對象的步驟(無論以何種方式建立對象,步驟都有如下三步)

          a.分配內存

          b.將實例變量初始化爲默認值

          c.初始化對象爲正確的值

    (7)根據對象建立方式的不一樣 ,初始化有如下三種方式

          a.clone,直接用源對象的屬性初始化新對象的屬性值

          b.若是對象的聲明語句中顯式初始化,則先進性顯式初始化,接着再執行構造函數

 

(8)構造方法的定義

         a.方法名與類名相同

         b.沒有返回類型

         c.不可以用static(構造函數和實例相關),final(構造函數不可以被繼承,所以不可以被重寫,定義成final畫蛇添足),synchronized,native(不提倡調用本地方法,不然平臺相關),abstract(構造函數不能被覆蓋,所以不可以是abstract類型)修飾

(9)構造函數能夠重載,能夠在一個構造函數中經過this調用另一個構造函數

(10)this的使用

          a.必須做爲第一條語句出現

          b.只能在構造函數中經過this調用其餘構造方法,不可以在實例方法中經過this調用構造方法,可是能夠經過this調用其餘的成員

          c.不可以經過方法名調用構造函數

(11)默認構造方法(定義就是,沒有參數的方法叫作默認構造方法)

         a.沒有參數的構造方法

         b.有兩種,一種是隱式構造方法,有java提供,另一種是在程序中顯式定義默認構造方法,只要沒有參數就好了

         c.若是一個類中的全部構造函數都有參數,那麼這個類就沒有默認構造方法,若是一個類中有顯式定義默認構造方法,那麼這個類就沒有隱式默認構造方法

(12)構造方法不可以被繼承(因此沒必要定義成爲final或者abstract類型的)

(13)super

          a.子類的構造方法中,只可以經過super調用父類的構造方法,不可以經過方法名調用;

          b.做爲子類構造方法的第一句;

(14)若是父類沒有默認構造方法(全部的方法都有參數),子類沒有使用super或者super中沒有參數,則會出現編譯錯誤

(15)構造方法能夠有private,protected,public和默認四種訪問級別

(16)關於private的構造方法

          只可以在當前類中訪問

          a.當前類中的其餘構造方法經過this訪問

          b.當前類中的成員方法經過new訪問

構造方法能且僅能經過this調用類中的其餘構造方法,成員方法能且僅能經過new調用類中的構造方法

(17)什麼時候將構造函數定義爲private:

          a.類的全部方法都是靜態方法,無需建立類的實例就能夠調用靜態方法

          b.禁止類被繼承,且不容許建立類的實例

(18)private構造方法vsfinal類(建立實例方買呢)

         前者既不容許建立類的實例,又不容許類被繼承

         後者能夠經過new建立類的實例,但不容許類被繼承

()private構造方法vsabstract類

      後者雖本類不可以被實例化,可是能夠有實例(可是擁有子類的實例),可是但願經過繼承實現類中的抽象方法,而前者不可以被繼承

相關文章
相關標籤/搜索