執行順序html
仍是上別人的吧 寫的不錯 瞭解得透徹 https://www.cnblogs.com/kingxiaozi/p/6021011.htmljvm
package com.osy.test; /** * * @author 做者 E-mail: * @date 建立時間:2018年8月28日 上午10:33:36 * @version 1.0 * * @parameter * @since * @return */ public class Test { // 1.第一步,準備加載類 public static void main(String[] args) { new Test(); // 4.第四步,new一個類,但在new以前要處理匿名代碼塊 } static int num = 4; // 2.第二步,靜態變量和靜態代碼塊的加載順序由編寫前後決定 { num += 3; System.out.println("b"); // 5.第五步,按照順序加載匿名代碼塊,代碼塊中有打印 } int a = 5; // 6.第六步,按照順序加載變量 { // 成員變量第三個 System.out.println("c"); // 7.第七步,按照順序打印c } Test() { // 類的構造函數,第四個加載 System.out.println("d"); // 8.第八步,最後加載構造函數,完成對象的創建 } static { // 3.第三步,靜態塊,而後執行靜態代碼塊,由於有輸出,故打印a System.out.println("a"); } static void run() // 靜態方法,調用的時候才加載// 注意看,e沒有加載 { System.out.println("e"); } }
靜態塊(靜態變量)——>成員變量——>代碼塊——>構造方法——>靜態方法 函數
輸出abcdspa
解釋一哈 先是執行static靜態塊或者是靜態變量 那個靜態方法調用的時候才加載因此無論 而後會去執行main函數 而後new對象的時候執行構造塊兒的方法 若是有構造函數.net
則會執行構造函數的方法code
給個連接 看了以後會更清楚
https://blog.csdn.net/whing123/article/details/77988936
https://blog.csdn.net/wzw9353/article/details/74892149這個主要是講jvmhtm
https://www.cnblogs.com/numen-fan/p/7163745.html?utm_source=itdadao&utm_medium=referral 這個是解答爲何main函數是static的對象