1,、靜態(tài)代碼塊格式: static
{
執(zhí)行語(yǔ)句
}
特點(diǎn):隨著類的加載而執(zhí)行,,且只執(zhí)行一次,,并優(yōu)先于主函數(shù)。用于給類初始化的,。
2,、執(zhí)行順序: 示例一 靜態(tài)代碼塊隨著類加載而加載 有多個(gè)靜態(tài)代碼塊的,按代碼塊前后順序加載 一個(gè)代碼塊,,只執(zhí)行一次,。 package javastudy;
class StaticCode1{
static{ //第4步。由第3步觸發(fā),。
System.out.println('x');
}
}
public class StaticDemo2 {
static{ //第1步,。先加載主函數(shù)所在類,所以先加載并執(zhí)行這段靜態(tài)代碼塊,。
System.out.println('y');
}
public static void main(String[] args) {
new StaticCode1(); //第3加載StaticCode1類,。
new StaticCode1(); //不執(zhí)行。靜態(tài)代碼塊只執(zhí)行一次
System.out.println('over'); //第5步,。輸出打印,。
}
static{ //第2步。多個(gè)靜態(tài)代碼塊之前,,按前后順序執(zhí)行
System.out.println('z');
}
}
輸出: y
示例二
public class StaticDemo1 {
public static void main(String[] args) {
StaticDemo1 t1=new StaticDemo1(); //第2步,,初始化構(gòu)造函數(shù),i=9
System.out.println(t1.i); //第3步,,按順序執(zhí)行,9
speak(); //第4步,,按順序執(zhí)行,,調(diào)用靜態(tài)函數(shù)
}
static int i=1; //靜態(tài)變量存到靜態(tài)區(qū)域,。
static void speak() //靜態(tài)函數(shù)存到靜態(tài)區(qū)域,。調(diào)用時(shí)執(zhí)行,。
{
System.out.println('a');;
}
static { //第1步,靜態(tài)代碼塊隨著類的加載,優(yōu)先執(zhí)行且只執(zhí)行一次,。i=3,i 3打印結(jié)果是4,。
i=i 3;
System.out.println(i);
}
public StaticDemo1(){ //構(gòu)造方法,,初始化時(shí)執(zhí)行。
i=i 5; //i=9
System.out.println(i);
}
}
輸出: 4
示例三 package javastudy;
public class StaticDemo2 {
public static void main(String[] args) {
}
static{ //隨類加載就執(zhí)行,,不需要實(shí)例化
System.out.println('z');
}
}
輸出: z
示例四 class StaticCode2{
StaticCode2(){ //沒(méi)有調(diào)用,。
System.out.println('aa');
}
static{ //1 靜態(tài)代碼塊先執(zhí)行
System.out.println('x');
}
{ //2 對(duì)象的構(gòu)造代碼塊。給對(duì)象初始化的,。
System.out.println('cc');
}
StaticCode2(int i){ //3 被調(diào)用
System.out.println('aa');
}
public static void show(){ //靜態(tài)方法,,沒(méi)有調(diào)用,。
System.out.println('gogogo');
}
}
public class StaticDemo4 {
public static void main(String[] args) {
new StaticCode2(4);
}
}
輸出: x
示例五 public class StaticDemo5 {
static int i=1;
static{
System.out.println('a'); //第1步。a,。且只執(zhí)行一次
i ; //i=i 1,,結(jié)果2
}
public StaticDemo5(){
System.out.println('c'); //第2步。
i ; //i=i 1,,結(jié)果3
}
public static void main(String[] args) {
StaticDemo5 t1=new StaticDemo5();
System.out.println(t1.i); //第3步,。3
StaticDemo5 t2=new StaticDemo5(); //第4步。c,。第二次創(chuàng)建實(shí)例,。static靜態(tài)代碼塊不執(zhí)行。
System.out.println(t2.i); //第5步,。又執(zhí)行了一次StaticDemo5()構(gòu)造函數(shù),。4
}
}
輸出: a 創(chuàng)建第二個(gè)對(duì)象StaticDemo5 t2=new StaticDemo5()時(shí),其實(shí)i已經(jīng)先于對(duì)象存在于靜態(tài)區(qū)域 |
|
來(lái)自: windxn > 《Java技術(shù)指南》