先來理解下每一個的意思,函數
關鍵字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
能夠看出來,靜態代碼塊只執行一次,而每次建立對象都會調用共同的構造代碼塊,而構造函數也只在建立對象時執行該對象的構造函數。配置