靜態代碼塊
關鍵字static,實例如下:
public class FileUploadUtils { static { try { InputStream in = getFileUploadInputStream (); fileProps.load (in); uploadPath = fileProps.getProperty ("upload.path").trim (); } catch (IOException e) { e.printStackTrace (); } } ... }
特點:類的加載而執行,只執行一次,並優先於主函數。具體說,靜態代碼塊是由類調用的。類調用時,先執行靜態代碼塊,然后才執行主函數的,總的來說,靜態代碼塊是和類一起的,優先級最高,類加載的同時,靜態代碼塊同時也執行,但只執行一次,所以作用一般是用來加載一些配置代碼,或者加載某些文件配置。
構造函數
構造函數的作用是用於給對象進行初始化,對象一建立,就會調用與之相應的構造函數,也就是說,不建立對象,構造函數時不會運行的。
構造代碼塊
構造代碼塊的作用同樣是給對象進行初始化。對象一建立就運行構造代碼塊了,而且優先於構造函數執行。這里要強調一下,有對象建立,才會運行構造代碼塊,類不能調用構造代碼塊的,而且構造代碼塊與構造函數的執行順序是前者先於后者執行。
構造函數和構造代碼塊的區別:
構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因為構造函數是可以多個的,運行哪個構造函數就會建立什么樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。

運行結果:
可以看出來,靜態代碼塊只執行一次,而每次創建對象都會調用共同的構造代碼塊,而構造函數也只在創建對象時執行該對象的構造函數。
