freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[工學(xué)]java學(xué)習(xí)筆記之父類與子類-文庫吧資料

2024-08-30 01:11本頁面
  

【正文】 成員的賦予缺省初始值(內(nèi)存分配部分無法考證,這是java虛擬機(jī)自動完成的),這個你可以通過在子類Child的cmethod方法的最開始用 (cm3)打印cm3的值(輸出為0,其它類型成員的值可以通過類似的方法得到)。  另外需要說明一下的是你可以將有參構(gòu)造方法中的this調(diào)用去掉,然后看看反編譯的結(jié)果,你會發(fā)現(xiàn)兩個構(gòu)造方法非常的類似,如果你將兩個構(gòu)造方法的內(nèi)容改為一樣的,那么反編譯后的生成也將是同樣的。s default constructor)(接下來的三條語句),最后方法執(zhí)行完畢返回(最后一條語句return)。);接下來是執(zhí)行cm3=cmethod()(接下來的四條語句);(Child39。  第三塊,缺省構(gòu)造方法的實現(xiàn),這是本文的重點(diǎn),下面詳細(xì)講解?! 〉诙K,是一個Method static {},對比看看第一部分,它被處理為一個靜態(tài)的方法(從前面的Method可以看出),這就是源代碼中的靜態(tài)初始化塊,從后面的語句可以看出它執(zhí)行的就是 (Child39。  先看看最開始的部分,很像一個標(biāo)準(zhǔn)的c++類的聲明,確實如此?! ≌f完上面這些你現(xiàn)在應(yīng)該很容易看懂上面的結(jié)果和下面將要敘述的內(nèi)容了?! ∪绻阒苯訖z查字節(jié)碼,你會看到成員信息沒有直接嵌入指令而是像所有由java類使用的常量那樣存儲在一個共享池中,將成員信息存儲在一個常量池中可以減小字節(jié)碼指令的大小,因為指令只需要存儲常量池中的一個索引而不是整個常量?! ∠旅娼忉屓绾胃鶕?jù)這個輸出得到類實例的實際的構(gòu)造順序,在開始說明前先解釋一下輸出的語句的格式,語句中最前面的一個數(shù)字是指令的偏移值,這個我們在此可以不管,第二項是指令助記符,可以從字面上大致看出指令的意思。s method  5 invokevirtual 21 Method void println()  8 iconst_3  9 ireturn  Method void staticmethod()  0 getstatic 20 Field out  3 ldc 6 String Child39。s default constructor  42 invokevirtual 21 Method void println()  45 return  Method Child(int)  0 aload_0  1 invokespecial 12 Method Child()  4 aload_0  5 iload_1   6 putfield 15 Field int cm1  9 getstatic 20 Field out  12 ldc 4 String Child39。s static initialize block  10 invokevirtual 21 Method void println()  13 return  Method Child()  0 aload_0  1 invokespecial 14 Method Parent()  4 aload_0  5 bipush 10  7 putfield 16 Field int cm2  10 aload_0  11 aload_0  12 invokevirtual 18 Method int cmethod()  15 putfield 17 Field int cm3  18 getstatic 20 Field out  21 ldc 2 String Child39?! tatic void staticmethod()?! hild(int)?! tatic {}。  Other co?! nt cm2?! ∪绻鶕?jù)以上java規(guī)范中給出的順序也可以合理的解釋程序的輸出結(jié)果,那么如何親眼看到是規(guī)范中的順序而不是以上根據(jù)程序的輸出推斷的順序呢?  下面就使用JDK自帶的javap工具看看實際的順序,這個工具是一個根據(jù)編譯后的字節(jié)碼生成一份字節(jié)碼的助記符格式的文檔的工具,就像根據(jù)機(jī)器碼生成匯編代碼那樣?!   selfdefine constructor  program end   如果沒有看過上面的關(guān)于類的構(gòu)造的說明,很容易讓人誤解為類的構(gòu)造順序是如下的結(jié)果(忽略參數(shù)綁定、內(nèi)存分配和非靜態(tài)成員的缺省值賦值): ?。ㄟ@個的先后順序取決于源文件中的書寫順序,可以將初始化塊置于成員聲明前,那么先執(zhí)行的將是初始化塊,將上面的代碼稍稍變動一下就可以驗證這一點(diǎn)。s default constructor  Child39。s method  Child39。s instance initialize block  Parent39。s static initialize block  10  Parent39。  }  }   進(jìn)入此文件所在的目錄,然后  編譯此文件:javac   運(yùn)行此程序:java ?classpath . InitializationTest  得到的結(jié)果是:   program start  Parent39。  c= new Child(10)?! ?program start)。s default constructor)?!   }  class Other  {  int om1。s method)。s staticmethod)。s selfdefine constructor)?! m1=m。s default constructor)。  }    Child()  {  co=new Other()。   }   static  {  (Child39?!   (Child39。  Other co?! nt cm2=10?! eturn 3?!    int pmethod()  {  (Parent39?!   static void staticmethod()  {  (Parent39?!     Parent()  {  (Parent39?! tatic  {  (Parent39。s instance initialize block)。  int pm3=pmethod()?! ‖F(xiàn)在來看看精心構(gòu)造的一個實例:   class Parent  {  int pm1?!  ! ?)調(diào)用(可以是其它帶參數(shù)的this()調(diào)用)則執(zhí)行之,執(zhí)行完畢后進(jìn)入第6步繼續(xù)執(zhí)行,如果沒有this調(diào)用則進(jìn)行下一步。關(guān)鍵字: java 構(gòu)造 javap 字節(jié)碼 bytecode   按照java規(guī)范,一個類實例的構(gòu)造過程是遵循以下順序的: ?。╟onstructor,也有翻譯為構(gòu)造器和構(gòu)造函數(shù)的)是有參數(shù)的則進(jìn)行參數(shù)綁定。 在一個構(gòu)造方法中只能調(diào)用一次其它的構(gòu)造方法,并且調(diào)用構(gòu)造方法的語句必須是第一條語句。   3.主類的非靜態(tài)對象(變量)初始化。   初始化的順序包括構(gòu)造方法調(diào)用的順序如下:   1.主類的靜態(tài)成員首先初始化。   程序中的主類的靜態(tài)變量會在main()方法執(zhí)行前進(jìn)行初始化工作。   靜態(tài)對象(變量)在非靜態(tài)對象前初始化。在所有類成員初始化完成后,才調(diào)用對象所在類的構(gòu)造方法創(chuàng)建對象。 } } 4 輸出結(jié)果: Test main() start... one2 one3 = 0   不僅第1次創(chuàng)建對象時,類中所有的靜態(tài)變量要初始化,第1次訪問類中的靜態(tài)變量(沒有創(chuàng)建對象)時,該類中所有的靜態(tài)變量也要按照它們在類中排列的順序初始化。 } } public class Test { public static void main(String[] args) { (Test main() start...)。 static One one_3 = new One(one3)。 One one_1 = new One(one1)。   示例6: class One { One(String str) { (str)。結(jié)果中只輸出了一次one3,這也說明:如果一個類中有靜態(tài)對象,那么它會在非靜態(tài)對象前初始化,但只初始化一次。 Two two_2 = new Two(two2)。 Two two_1 = new Two(two1)。 } 3 } public class Test { static Two two_3 = new Two(two3)。 static One one_3 = new One(one3)。 } } class Two { One one_1 = new One(one1)。非靜態(tài)對象每次調(diào)用時都要初始化。 Two two_2 = new Two(two2)。 Two two_1 = new Two(two1)。 Two(String str) { (str)。 One one_2 = new One(one2)。   示例4: class One { One(String str) { (str)。這里Two類有3個成員變量,它們都是One類的對象,所以要先調(diào)用3次One類的相應(yīng)的構(gòu)造方法。 } } 輸出結(jié)果: Test main() start... one1 one2 one3 two   在main()方法中實例化了一個Two類的對象。 } } public class Test { public static void main(String[] args) { (Test main() start
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1