java 初始化與main方法

來源:互聯網
上載者:User

1,首先由一位網友的博文引出話題:

地址:http://blog.csdn.net/tan605963296/article/details/5562928

Java的類是用到才開始載入的,並且在每個類的構造器調用之前,類的每個域(成員變數)都要首先被編譯器初始化一次,然後才輪到構造器來幹活兒。但是,Java的初始化是惰性的,Java編譯器會保證每個變數在使用之前會被初始化,因此Java中只要求程式員在合適的地方為類成員給一個有效值即可。

每當執行Java編譯器的時候,編譯器會尋找指定的類,當它找到類時,首先需要初始化static變數,因為這些成員可以在沒有執行個體的情況下運行,接著,再按照變數的聲明順序依次初始化類的成員,成員初始化完畢之後才為自己調用構造器,一切進行完畢之後,才可以調用方法。但主類比較特殊,主方法會在構造器之前,static變數初始化之後調用,這是由於Java的惰性初始化,在main方法被調用之前無法知道是否存在主類的執行個體。

主類為什麼特殊呢,可以這樣理解:public void main(String []args)主方法是靜態,可以把它看做靜態成員,所以在靜態變數初始化之後調用。

public class InitialTest1{      int a;      int b;      static int c;     {            a=-1;            b=1;     }//這個就是所謂的初始化代碼塊     static {             c=100;     }//static成員有專屬的static初始化代碼塊     InitialTest(){Syetem.out.println("InitialTest creat now!")}//這個和C++確實不同,許可權大為縮減}

2,如果想運行上面的程式,Jvm會找不到入口,但是下面的程式會得到執行:

package com.puzzle.initialization;public class InitialTest {static{System.out.println("初始化塊");}public static void main(String[] args) {}}

所以說:main方法在某種程度上只是提供了一個入口,有了這個入口,程式就可以運行,即使main方法裡面什麼都沒有。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.