java執行順序
發布時間: 2025-02-23 22:43:29
❶ java類的完整構造執行順序
這里只說一個完整的結果 至於為什麼是這樣的順序 可以參考我以前的文章 深入剖析java類的構造方式
- 如果父類有靜態成員賦值或者靜態初始化塊 執行靜態成員賦值和靜態初始化塊 如果類有靜態成員賦值或者靜態初始化塊 執行靜態成員賦值和靜態初始化塊 將類的成員賦予初值(原始類型的成員的值為規定值 例如int型為 float型為 f boolean型為false 對象類型的初始值為null) 如果構造方法中存在this()調用(可以是其它帶參數的this()調用)則執行之 執行完畢後進入第 步繼續執行 如果沒有this調用則進行下一步 (這個有可能存在遞歸調用其它的構造方法) 執行顯式的super()調用(可以是其它帶參數的super()調用)或者隱式的super()調用(預設構造方法) 此步驟又進入一個父類的構造過程並一直上推至Object對象的構造 執行類申明中的成員賦值和初始化塊 執行構造方法中的其它語句
其中第 步是比較麻煩的 因為this調用實際上會調用類的另外一個構造方法 最終應該是執行類的某個構造方法 它可能會顯示的調用super 但是無論是否調用super 最終都是執行super的 也就是父類的構造方法並一直這樣遞歸到Object 所以在子類和父類的構造中 首先構造或者說執行的是父類的構造 但是它是由子類的構造方法調用的 先於構造方法的方法體裡面的內容 這個是由編譯器決定的 所以我感覺簡單直觀一些的順序表述應該是
- 如果父類有靜態成員賦值或者靜態初始化塊 執行靜態成員賦值和靜態初始化塊 如果類有靜態成員賦值或者靜態初始化塊 執行靜態成員賦值和靜態初始化塊 將類的成員賦予初值(原始類型的成員的值為規定值 例如int型為 float型為 f boolean型為false 對象類型的初始值為null) 執行構造方法 並可能遞歸調用this() 最終先執行父類的構造方法並一直遞歸到Object的構造方法的執行 父類的構造方法執行完成後 執行類申明中的成員賦值和初始化塊 執行構造方法中的其它語句
最終的簡化順序版本是
- 父類的靜態成員賦值和靜態塊 子類的靜態成員和靜態塊 父類的構造方法 父類的成員賦值和初始化塊 父類的構造方法中的其它語句 子類的成員賦值和初始化塊 子類的構造方法中的其它語句
❷ java中運算符的優先順序順序是怎樣的
以下是一張常見的運算符優先順序表,按照從高到低的順序排列:
- 括弧 ():具有最高優先順序,可以優先執行。
- 算術運算符:+、-、*、/、%、++、--。這些運算符具有相對較高的優先順序,它們通常在括弧內運算完成後再執行。
- 身份運算符:!(邏輯非)、~(按位取反)、&(按位與)、|(按位或)、^(異或)。這些運算符的優先順序高於算術運算符,但低於括弧。
- 比較運算符:==、!=、>、<、≥、≤。這些運算符的優先順序低於身份運算符,但高於算術運算符和括弧。
- 賦值運算符:=, +=, -=, *=, /=, %=, <<, >>, &=, ^=, |=。這些運算符的優先順序低於比較運算符和身份運算符,但高於括弧。
值得注意的是,有些語言可能會根據特定的語法規則對運算符的優先順序進行微調。此外,可以使用括弧來改變運算的順序,即使它們看起來並不符合默認的優先順序順序。這只是一張常見的運算符優先順序表的一部分,具體的優先順序可能會因編程語言和上下文而異。在編寫代碼時,建議查閱特定語言的文檔以獲取准確的運算符優先順序信息。
❸ java中的return和finally誰先執行
finally先執行.
可以形象的說,方法在順序化的一直往下走,
走著走著,發現了Rerurn(並未執行),它知道它快活不下去了,臨死前.他就去找Finally,讓Finally把事情做完.
這種情況在Debug的時候比較明顯,走到Return所在行,就進Finally,然後在回到Rerurn,做返回
熱點內容