當前位置:首頁 » 編程語言 » java載入順序

java載入順序

發布時間: 2022-07-03 22:53:51

java:類成員的初始化順序 類載入 疑問(如圖)

一段程序的完整執行過程是先編譯,然後載入到jvm,然後初始化,然後你才能使用(當然中間還有需要細節)。初始化是執行類構造器方法的過程,類構造器方法是由編譯器自動收集類中的所有類變數的賦值動作和靜態語句塊中的語句合並產生的(不是類的構造方法)。所以,簡而言之,一個類在初始化的時候,會先執行它的靜態代碼塊,當然,如果這個類有父類的話,同樣的道理,如果發現該父類沒有初始化,則需要先對其父類進行初始化,再對該類進行初始化。
至於一個類在什麼時候初始化,簡單的說,當程序第一次用到這個類時候就會對其進行初始化(前提是其沒有進行過初始化)。

❷ java 類載入先後順序

父類態代碼塊
父類靜態屬性
//以上根據代碼順序
子類靜態屬性
子類靜態代碼塊
//以上根據代碼順序
父類屬性
父類代碼塊
//以上根據代碼順序
父類構造器
子類屬性
子類代碼塊
//以上根據代碼順序
子類構造方法
子類方法
父類方法
父類靜態方法
子類靜態方法

package com.zz;

/**
* Created by @摩西摩西 2020/3/21 22:29
**/
public class Father {
public String name=Son.getmetod("父類屬性");
public Father(){
System.out.println("父類構造器");
}
{
System.out.println("父類代碼塊");
}
public void fatherMethod(){
System.out.println("父類方法");
}

static {
System.out.println("父類態代碼塊");
}
static String name1=Son.getmetod("父類靜態屬性");
public static void fatherStaticMethod(){
System.out.println("父類靜態方法");
}
}
package com.zz;

/**
* Created by @摩西摩西 2020/3/21 22:32
**/
public class Son extends Father {
public String name = getmetod("子類屬性");

public Son() {
System.out.println("子類構造方法");
}

{
System.out.println("子類代碼塊");
}
public void sonMethod(){
System.out.println("子類方法");
}

public static String name1 = getmetod("子類靜態屬性");

static {
System.out.println("子類靜態代碼塊");
}

public static void sonStaticMethod() {
System.out.println("子類靜態方法");
}

public static String getmetod(String s) {
System.out.println(s);
return s;
}

public static void main(String[] args) {
Son son= new Son();
son.sonMethod();
son.fatherMethod();
fatherStaticMethod();
sonStaticMethod();
}
}

❸ Java面試題, 類載入器,載入順序的問題,不太懂結果為什麼是這樣 結果是1,0

類載入時,按順序執行靜態成員變數初始化。
最先初始化 singleton = new Singleton(); 構造方法中 counter1++ 後 counter1 為 1,counter2++ 後 counter2 為1。
然後初始化 counter2 = 0,counter2 從 1 變成 0。
注意,public static int counter1 這是變數聲明,不會像 counter2 = 0 這樣在初始化階段設成 0 。

❹ java靜態代碼塊 類載入順序問題。

原因就是一句話:先有了父親,才會有兒子!
程序運行時,載入AB兩類,因為A是B子類,所以先載入B類,Load B,再加在A類 LoadA,調用A a = new A()代碼時,會先調用其父類B的構造方法 Create B 再調用A的構造方法 Create A

❺ jsp中 java代碼、js、html代碼 載入的順序

jsp中是先編譯「java代碼」為靜態代碼,之後從代碼第一行開始一直掃描到到代碼最後一行。
解釋:jsp是可以動態載入的,也就是說jsp變更不需要重啟項目,如果裡面有java代碼的話,載入jsp的時候先編譯java代碼,如果有錯誤,直接拋出錯誤,不繼續運行。如果沒錯誤的話,掃描出body中的代碼顯示到頁面,之後再載入js。

❻ Java抽象類載入順序

正常是不應該的,靜態代碼塊是類載入期執行的,不可能出現先執行構造再執行載入

❼ java的類載入器有哪些,它們的順序是什麼

類載入器有四種,分別是 bootstrapClassLoader (主要載入java核心api) , ExtClassLoaders是擴展類的類載入器,AppClassLoader 程序類載入器,還有一個是用戶繼承ClassLoader重寫的類載入器。

❽ JAVA在載入類時對於父類和靜態的有怎樣的順序

關於這個問題,全局變數(成員變數)是在創建對象的時候分配內存的創建對象過程為1分配空間2遞歸的創建父類對象(無父類這步可省略)3初始化成員變數4調用構造方法創建一個對象靜態變數是在類載入的時候分配空間的,靜態變數和對象沒有關系是在JVM第一次讀到一個類的時候載入信息的過程中分配空間的類載入過程為1載入父類(如果父類已經載入過,則不在載入)2初始化靜態屬性3按順序的初始化靜態代碼塊初始化的前提就是分配空間而且靜態變數在以後的創建對象的時候不在初始化所以一般用靜態來保存共享信息

❾ 求大神 java程序的載入優先順序

基本都對,只有一個地方不完全,如果p是繼承f類,f也有默認的構造的話,那麼順序應該是這樣的,f的構造運行,p的普通構造代碼塊,載入p的構造函數
簡單的說普通初始化代碼塊是緊跟super()後運行,之後再運行構造函數其他代碼

熱點內容
永劫無間伺服器為什麼那麼爛 發布:2024-05-09 04:34:38 瀏覽:809
用哪個軟體配置華為企業路由器 發布:2024-05-09 04:23:58 瀏覽:520
簡易腳本 發布:2024-05-09 04:17:30 瀏覽:801
返校vlog腳本 發布:2024-05-09 04:15:53 瀏覽:618
vps雲伺服器免費租用 發布:2024-05-09 04:10:42 瀏覽:208
空調壓縮機排量 發布:2024-05-09 04:08:42 瀏覽:539
android使用靜態庫 發布:2024-05-09 04:05:40 瀏覽:213
原生安卓開機動畫在哪裡 發布:2024-05-09 03:52:19 瀏覽:394
微信收藏在哪個文件夾 發布:2024-05-09 03:47:03 瀏覽:826
ftp遠程登錄 發布:2024-05-09 03:44:40 瀏覽:227