日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java类验证和装载顺序_Java类的加载顺序

發(fā)布時(shí)間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java类验证和装载顺序_Java类的加载顺序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、有繼承關(guān)系的加載順序

關(guān)于關(guān)鍵字static,大家 都知道它是靜態(tài)的,相當(dāng)于一個(gè)全局變量,也就是這個(gè)屬性或者方法是可以通過類來訪問,當(dāng)class文件被加載進(jìn)內(nèi)存,開始初始化的時(shí)候,被static修飾的變量或者方法即被分配了內(nèi)存,而其他變量是在對(duì)象被創(chuàng)建后,才被分配了內(nèi)存的。

所以在類中,加載順序?yàn)?#xff1a;

1.首先加載父類的靜態(tài)字段或者靜態(tài)語句塊

2.子類的靜態(tài)字段或靜態(tài)語句塊

3.父類普通變量以及語句塊

4.父類構(gòu)造方法被加載

5.子類變量或者語句塊被加載

6.子類構(gòu)造方法被加載

父類代碼:

public class FuLei {

static int num = 5;//1.首先被加載

static{

System.out.println("靜態(tài)語句塊已經(jīng)被加載"+num); //2.被加載

}

int count = 0; //5.被加載

{

System.out.println("普通語句塊"+count++);//6.被加載

}

public FuLei(){

System.out.println("父類的構(gòu)造方法在這時(shí)候加載count="+count);//7.被加載

}

}

子類代碼:

public class ZiLei extends FuLei {

static{

System.out.println("靜態(tài)語句塊和靜態(tài)變量被初始化的順序與代碼先后順序有關(guān)"); //3.被加載

}

static int num = 45;//4.被加載

int numre = 0; //8.被加載

{

numre++;

System.out.println("numre"+numre);//9.被加載

}

public ZiLei(){

System.out.println("子類構(gòu)造方法");//10.被加載

}

public static void main(String[] args){

ZiLei ht = new ZiLei();

}

}

console打印:

靜態(tài)語句塊已經(jīng)被加載5

靜態(tài)語句塊和靜態(tài)變量被初始化的順序與代碼先后順序有關(guān)

普通語句塊0

父類的構(gòu)造方法在這時(shí)候加載count=1

numre1

子類構(gòu)造方法

注意

當(dāng)class文件被加載進(jìn)內(nèi)存,開始初始化的時(shí)候,被static修飾的變量或者方法即被分配了內(nèi)存,而其他變量是在對(duì)象被創(chuàng)建后,才被分配了內(nèi)存的。

將子類代碼中的創(chuàng)建對(duì)象注釋掉

// ZiLei ht = new ZiLei();

console打印:

靜態(tài)語句塊已經(jīng)被加載5

靜態(tài)語句塊和靜態(tài)變量被初始化的順序與代碼先后順序有關(guān)

2、沒有繼承關(guān)系的加載順序

代碼示例

public class Test {

public static void main(String[] args) {

new Test(); //4.第四步,new一個(gè)類,但在new之前要處理匿名代碼塊

}

static int num = 4; //2.第二步,靜態(tài)變量和靜態(tài)代碼塊的加載順序由編寫先后決定

{

num += 3;

System.out.println("b"); //5.第五步,按照順序加載匿名代碼塊,代碼塊中有打印

}

int a = 5; //6.第六步,按照順序加載變量

{ // 成員變量第三個(gè)

System.out.println("c"); //7.第七步,按照順序打印c

}

Test() { // 類的構(gòu)造函數(shù),第四個(gè)加載

System.out.println("d"); //8.第八步,最后加載構(gòu)造函數(shù),完成對(duì)象的建立

}

static { // 3.第三步,靜態(tài)塊,然后執(zhí)行靜態(tài)代碼塊,因?yàn)橛休敵?#xff0c;故打印a

System.out.println("a");

}

static void run() // 靜態(tài)方法,調(diào)用的時(shí)候才加載// 注意看,e沒有加載

{

System.out.println("e");

}

}

console打印:

a

b

c

d

3、注意

靜態(tài)代碼塊(只加載一次)

構(gòu)造方法(創(chuàng)建一個(gè)實(shí)例就加載一次)

靜態(tài)方法,調(diào)用的時(shí)候才會(huì)加載,不調(diào)用的時(shí)候不會(huì)加載

靜態(tài)語句塊和靜態(tài)變量被初始化的順序與代碼先后順序有關(guān)

總結(jié)

以上是生活随笔為你收集整理的java类验证和装载顺序_Java类的加载顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。