java类验证和装载顺序_Java类的加载顺序
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读心术保命丹快捷键(读心术秘籍)
- 下一篇: 中国最帅男人第一名(谁在中国最帅气的男人