程序的主入口是main方法,但是在jdk1.7之前,可以沒有main方法也一樣能運行,很是不可思議,到底是什么原因呢?,大家都知道在類中定義了靜態(tài)代碼塊的話,是首先執(zhí)行代碼塊里的語句的,如果把靜態(tài)代碼塊放到了主類中,到底是先執(zhí)行靜待代碼塊呢還是先執(zhí)行main方法呢?不用糾結,我來做個試驗。
1 static {2 System.out.println("運行的比main方法還要早");3 }4 5 public static void main(String[] args) {6 System.out.println("main方法輸出語句");7 }
運行結果是靜態(tài)代碼塊比main方法運行的還要提前,既然是這樣那把所有要執(zhí)行的程序直接放到靜態(tài)代碼塊里不就可以了嗎,就不需要main方法了吧,說實話,比如下面程序在JDK1.7版本之前確實是可以運行的,無需main方法。這個bug在JDK1.7之前都是存在的,但是在JDK1.7之后的版本卻無法運行了,這是由于版本升級所解決的問題,這個Bug從1995年開始一直到2012年都是存在的!