小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java類中代碼執(zhí)行順序

 yliu277 2019-07-21

java類中代碼執(zhí)行順序

          首先,沒有學(xué)java或者不知道類繼承的,可以不用浪費(fèi)時間樂,直接左上角,看多了有害。
          java的代碼執(zhí)行順序是自上而下,從左到右,方法是以main方法為主方法(通常情況下,事實(shí)上很多時候也會不用主方法)。但是就像HTML中CSS有執(zhí)行先后順序一樣,java中類的內(nèi)容也是有先后執(zhí)行順序的。java中類的組成結(jié)構(gòu)有主方法,代碼塊,構(gòu)造函數(shù),成員變量和函數(shù),除此外還有靜態(tài)和非靜態(tài)修飾之分。看起來很繁復(fù)但是實(shí)際上是有規(guī)律可依循的。
         首先先創(chuàng)建一個demo:
         package exclass;

public class HelloWorld {

private int age;

private String name;

private String WorkNumber;

public HelloWorld(){}

public HelloWorld(String bb)

{

System.out.println('父類構(gòu)造函數(shù)開始執(zhí)行');

}

{

System.out.println('父類非靜態(tài)代碼塊執(zhí)行');

}

static{

System.out.println('父類靜態(tài)代碼塊執(zhí)行');

}

void run()

{

System.out.println('正常方法執(zhí)行');

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age=age;

}

public String getName(){

return name;

}

public void setName(String name){

this.name=name;

}

public String getWorkNumber()

{

return WorkNumber;

}

public void setWorkNumber(String WorkNumber)

{

this.WorkNumber=WorkNumber;

}

public static void main(String[] args){

System.out.println('main方法執(zhí)行');

HelloWorld demo=new HelloWorld('bb');

demo.run();

}

}


執(zhí)行結(jié)果如下圖:圖片
這張圖我們可以看到順序是:靜態(tài)代碼塊 main方法 非靜態(tài)代碼塊 構(gòu)造方法(我口胡了,你們隨意)
但是后來我分成兩個類之后順序又變了(這也是我為什么發(fā)日志的原因,以前都沒注意這個),所以這個說說相當(dāng)于是一個筆記性質(zhì),純粹我放飛自我,請自帶B數(shù)。
兩個類的情況:
HelloWorld.class:

package exclass;

public class HelloWorld {

private int age;

private String name;

private String WorkNumber;

public HelloWorld(){}

public HelloWorld(String bb)

{

System.out.println('父類構(gòu)造函數(shù)開始執(zhí)行');

}

{

System.out.println('父類非靜態(tài)代碼塊執(zhí)行');

}

static{

System.out.println('父類靜態(tài)代碼塊執(zhí)行');

}

void run()

{

System.out.println('正常方法執(zhí)行');

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age=age;

}

public String getName(){

return name;

}

public void setName(String name){

this.name=name;

}

public String getWorkNumber()

{

return WorkNumber;

}

public void setWorkNumber(String WorkNumber)

{

this.WorkNumber=WorkNumber;

}

}

helloworld1.class:

package exclass;

public class helloworld1 {

public static void main(String[] args){

System.out.println('main方法執(zhí)行');

HelloWorld HW=new HelloWorld('BB');

HW.run();

}

}

運(yùn)行截圖如下:
圖片
 順序變?yōu)椋?main方法 靜態(tài)代碼塊 非靜態(tài)代碼塊 構(gòu)造方法 run方法
這個問題其實(shí)也不難理解,但是容易犯錯誤,首先第一個代碼中我們是在類的內(nèi)部用的主方法,對于一個類而言首先是對靜態(tài)進(jìn)行處理,然后再執(zhí)行相應(yīng)代碼,因此優(yōu)先執(zhí)行了靜態(tài)代碼塊然后執(zhí)行main,而第二份代碼中因?yàn)槭瞧渌愔型ㄟ^對象去調(diào)用HelloWorld,因此是main置前,實(shí)際上是 (helloworld1的相關(guān)預(yù)先執(zhí)行) main方法 靜態(tài)代碼塊 非靜態(tài)代碼塊 構(gòu)造方法 run方法,兩個代碼都沒得問題.

那么講遠(yuǎn)一點(diǎn),假設(shè)我們這有一個父類,一個子類。在子類執(zhí)行的時候,父子類的處理順序是什么呢?(SOLO父子局)
首先,子類數(shù)據(jù)是繼承自父類的,因此在子類調(diào)用時會先調(diào)用父類,那么就很好理解了,放上如下代碼:
HelloWorld.class:

package exclass;

public class HelloWorld {

public int age;

public String name;

public String WorkNumber;

public HelloWorld(){}

public HelloWorld(String bb)

{

System.out.println('父類構(gòu)造方法開始執(zhí)行');

}

{

System.out.println('父類非靜態(tài)代碼塊執(zhí)行');

}

static{

System.out.println('父類靜態(tài)代碼塊執(zhí)行');

}

void run()

{

System.out.println('父類一般方法執(zhí)行');

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age=age;

}

public String getName(){

return name;

}

public void setName(String name){

this.name=name;

}

public String getWorkNumber()

{

return WorkNumber;

}

public void setWorkNumber(String WorkNumber)

{

this.WorkNumber=WorkNumber;

}

}

chilclass.class:

package exclass;

public class chilclass extends HelloWorld{

public chilclass(){

System.out.println('子類構(gòu)造方法執(zhí)行');

}

static{

System.out.println('子類靜態(tài)代碼塊執(zhí)行');

}

{

System.out.println('子類非靜態(tài)代碼塊執(zhí)行');

}

@Override

void run(){

System.out.println('子類一般方法執(zhí)行');

}

public static void main(String[] args){

System.out.println('main方法執(zhí)行');

chilclass ch=new chilclass();

ch.run();

}

}
附上運(yùn)行截圖:圖片 

 執(zhí)行順序?yàn)椋?span>父類靜態(tài)代碼塊>子類靜態(tài)代碼塊>當(dāng)前主程序>父類非靜態(tài)代碼塊>父類構(gòu)造函數(shù)>子類非靜態(tài)代碼塊>子類構(gòu)造方法>子類一般方法,如果是外部調(diào)用chilclass那么main開頭。結(jié)合父子類關(guān)系(你大爺還是你大爺)已經(jīng)前面對比的結(jié)論其實(shí)可以直接推出,這里只是佐證。

總而言之......你以為是標(biāo)準(zhǔn)結(jié)局其實(shí)是還有情況噠?。ǚ浅O胝f的臺詞-1),我岸邊黃某最喜歡對自以為是的猴子說NO(非常想說的臺詞-2)


一、通過子類調(diào)用了父類的靜態(tài)字段,子類不會被初始化
二、類作為數(shù)組的組件類型不會觸發(fā)類初始化
三、常量池引用也會導(dǎo)致不初始化類
用大白話講:我從金庫拿錢走金庫還能像NPC一樣每天十二點(diǎn)刷新不成

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多