java中程式碼塊的認知
阿新 • • 發佈:2018-12-03
在以往面試題中,出現過很多次關於程式碼塊執行順序的題目,目前可算是搞清楚執行順序了。看以下程式碼:
package com.itcast.code; public class BlockTest { static{ System.out.println("我是BlockTest的靜態程式碼塊"); } public BlockTest(){ System.out.println("我是BlockTest的無參構造"); } { System.out.println("我是BlockTest的構造程式碼塊"); } public static void main(String[] args) { System.out.println("我是BlockTest的主函式。。。"); Coder c = new Coder(); Coder c2 = new Coder(); } } class Coder{ static{ System.out.println("我是Coder的靜態程式碼塊。。。"); } { System.out.println("我是Coder的構造程式碼塊。。。"); } public Coder(){ System.out.println("我是Coder的無參構造。。。"); } }
以上程式碼執行結果是:我是BlockTest的靜態程式碼塊 ------> 我是BlockTest的主函式。。。 ------> 我是Coder的靜態程式碼塊。。。 ------> 我是Coder的構造程式碼塊。。。
------> 我是Coder的無參構造。。。 ------> 我是Coder的構造程式碼塊。。。 -------> 我是Coder的無參構造。。。
靜態程式碼塊最先執行,因為它是隨著類的載入而載入,優先於物件的存在。其次執行的是主函式,因為主函式是程式執行的入口,在靜態程式碼塊執行完之後必然是它執行。然後因為建立了Coder物件,那麼它肯定會先執行它自己的靜態程式碼塊,接著呼叫構造程式碼塊,最後再呼叫無參構造對物件進行初始化。
一個完美的執行流程就是這樣,每天學習一點點,每天進步一點點,加油吧騷年!期待下一次的面試題能夠完美解答!