摘 要: Java是純面向對象的程序設計語言,通常我們在類中定義成員變量和方法,但是在類中除了成員變量和方法外,還有靜態塊和初始化塊。本文主要介紹Java程序中靜態塊、初始化塊及main方法的運行順序。
關鍵詞: Java程序 靜態塊 初始化塊 main函數
我們在編寫Java程序時都知道,Java是由類組成的,類又由成員變量和成員方法組成,Java程序的運行由main方法所在的類開始執行;但是,在Java中除了函數、main函數之外,還包括靜態塊和初始化塊,下面對它們分別進行介紹。
如下面的程序:
public class exam {
static{
System.out.println("static!");
}
public static void main(String[ ] args) {
System.out.println("main function!");
}
}
以上程序包括靜態塊和main函數,它們的執行順序是:先執行靜態塊,然后執行main方法。
結果如下:
static!
main function!
再看下面的程序:
public class exam {
static{
System.out.println("test");
}
{
System.out.println("exam");
}
public static void main(String args[ ]){
new Child();
}
}
class Father{
static{
System.out.println("Father static!");
}
{
System.out.println("Father block!");
}
Father()
{
System.out.println("Father Constructor!");
}
}
class Child extends Father{
static{
System.out.println("Child static!");
}
{
System.out.println("Child block!");
}
Child(){
System.out.println("Child Constructor!");
}
}
以上程序的執行結果是:Static靜態塊—父類的靜態塊—子類的靜態塊—父類的初始化塊—父類的構造函數—子類的初始化塊—子類的構造函數。
結果如下:
test
Father static!
Child static!
Father block!
Father Constructor!
Child block!
Child Constructor!
通過對以上程序的分析,我們可以發現在整個程序的執行過程中,除了函數之外還有一些靜態塊和初始化塊,以及它們的執行順序。Static靜態塊的特點是在類加載的時候就執行,而且只執行一次。
再看如下程序的執行結果,以下程序在上面程序的基礎上進行了修改。
public class exam {
static{
System.out.println("test");
//System.exit(0);
}
{
System.out.println("exam");
}
public static void main(String args[ ]){
new Child( );
new exam( );
new Child( );
}
}
class Father{
static{
System.out.println("Father static!");
}
{
System.out.println("Father block!");
}
Father( )
{
System.out.println("Father Constructor!");
}
}
class Child extends Father{
static{
System.out.println("Child static!");
}
{
System.out.println("Child block!");
}
Child(){
System.out.println("Child Constructor!");
}
}
結果如下:
test
Father static!
Child static!
Father block!
Father Constructor!
Child block!
Child Constructor!
exam
Father block!
Father Constructor!
Child block!
Child Constructor!
由以上程序的執行結果可知,當再次創建某一個類的實例的時候,不會再執行類中的靜態塊,但是初始化塊還是會執行。