Java 靜態代碼塊,構造代碼塊,構造函數執行順序。

先來理解下每一個的意思,函數

靜態代碼塊

關鍵字static,實例以下:spa

public class FileUploadUtils {
static {
        try {
            InputStream in = getFileUploadInputStream ();
            fileProps.load (in);
            uploadPath = fileProps.getProperty ("upload.path").trim ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }

    ...
}

 

特色:類的加載而執行,只執行一次,並優先於主函數。具體說,靜態代碼塊是由類調用的。類調用時,先執行靜態代碼塊,而後才執行主函數的,總的來講,靜態代碼塊是和類一塊兒的,優先級最高,類加載的同時,靜態代碼塊同時也執行,但只執行一次,因此做用通常是用來加載一些配置代碼,或者加載某些文件配置。code

構造函數

構造函數的做用是用於給對象進行初始化,對象一創建,就會調用與之相應的構造函數,也就是說,不創建對象,構造函數時不會運行的。對象

構造代碼塊

構造代碼塊的做用一樣是給對象進行初始化。對象一創建就運行構造代碼塊了,並且優先於構造函數執行。這裏要強調一下,有對象創建,纔會運行構造代碼塊,類不能調用構造代碼塊的,並且構造代碼塊與構造函數的執行順序是前者先於後者執行。blog

構造函數和構造代碼塊的區別:


構造代碼塊與構造函數的區別是:構造代碼塊是給全部對象進行統一初始化,而構造函數是給對應的對象初始化,由於構造函數是能夠多個的,運行哪一個構造函數就會創建什麼樣的對象,但不管創建哪一個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不一樣對象共性的初始化內容。get

下面看下實例代碼:
io

運行結果:class

能夠看出來,靜態代碼塊只執行一次,而每次建立對象都會調用共同的構造代碼塊,而構造函數也只在建立對象時執行該對象的構造函數。配置

相關文章
相關標籤/搜索