static{}静态代码块与{}普通代码块和构造代码块之间的区别
?
?
public class TestStatic {{System.out.println("構(gòu)造代碼塊");}TestStatic() {System.out.println("構(gòu)造函數(shù)代碼塊");}//類級(jí)別的初始化,只是在類加載的時(shí)候做一次static {System.out.println("static靜態(tài)代碼塊");} }1.靜態(tài)代碼塊,在虛擬機(jī)類加載的時(shí)候就會(huì)加載執(zhí)行,而且只執(zhí)行一次。
2.非靜態(tài)代碼塊,在對(duì)象創(chuàng)建的時(shí)候執(zhí)行,每次創(chuàng)建信對(duì)象都會(huì)執(zhí)行一次。
3.執(zhí)行順序: 靜態(tài)代碼塊 > 非靜態(tài)代碼塊 > 構(gòu)造方法
4.一個(gè)程序可以有多個(gè)靜態(tài)和非靜態(tài)代碼塊。相同點(diǎn):都是在JVM加載類時(shí)且在構(gòu)造方法執(zhí)行之前執(zhí)行,在類中都可以定義多個(gè),
一般在代碼塊中對(duì)一些static變量進(jìn)行賦值。.
另外static塊中只能使用static修飾的屬性。
程序中的static{}塊只是為了加載properties文件信息,這個(gè)加載只會(huì)被加載一次。
不同點(diǎn):靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—>非靜態(tài)代碼塊—>構(gòu)造方法)。
靜態(tài)代碼塊只在第一次new執(zhí)行一次,之后不再執(zhí)行,而非靜態(tài)代碼塊在每new
一次就執(zhí)行一次。非靜態(tài)代碼塊可在普通方法中定義(不過作用不大);而靜態(tài)代碼塊不行
1.靜態(tài)代碼塊只能定義在類里面,它獨(dú)立于任何方法,不能定義在方法里面。
2.靜態(tài)代碼塊里面的變量都是局部變量,只在本塊內(nèi)有效。
3.靜態(tài)代碼塊會(huì)在類被加載時(shí)自動(dòng)執(zhí)行,而無論加載者是JVM還是其他的類。
4.一個(gè)類中允許定義多個(gè)靜態(tài)代碼塊,執(zhí)行的順序根據(jù)定義的順序進(jìn)行。
5.靜態(tài)代碼塊只能訪問類的靜態(tài)成員,而不允許訪問實(shí)例成員。
?
?
總結(jié)
以上是生活随笔為你收集整理的static{}静态代码块与{}普通代码块和构造代码块之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试java回答优缺点_面试时被问“你有
- 下一篇: H5+ 二维码扫描功能