日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 静态代码块_JAVA静态代码块

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 静态代码块_JAVA静态代码块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天遇到下面的代碼,感覺很奇怪,特意記錄下:

代碼如下:

public class Test {

private static List objs = new ArrayList();

static {

objs.add(new Test(Test.S_NAME,Test.NAME,Test.COUNT));

objs.add(new Test(Test.S_NAME,Test.NAME,Test.COUNT));

}

private final static String S_NAME = "aaa";

private final static String NAME = new String("bbb");

private final static Long COUNT = 1l;

private String name;

private String title;

private Long count;

public Test(String name,String title,Long count) {

this.name = name;

this.title = title;

this.count = count;

}

public static void main(String[] args) {

System.out.println(objs);

}

@Override

public String toString() {

return "Test [name=" + name + ", title=" + title + ", count=" + count

+ "]";

}

}

運行結果如下:

感覺到特別奇怪,特意解釋下:

1,靜態變量聲明和初始化是兩個過程;

2, String字面常量有個pool, 每次有新的常量出現的時候, 先把它放入pool, 然后直接把變量引用指向pool中的位置;

3. java中的字面常量在編譯的時候被替換成真實的值,具體表現為字符串常量和基本類型常量。

4, static 塊java language specification是保證happen before的,也就是有順序的。

所以代碼等同于:

private static List objs = null;

private final static String S_NAME = "aaa"; //String pool.

private final static String NAME = null;

private final static Long COUNT = null;

static {

objs = new ArrayList();

objs.add(new Test(Test.S_NAME,Test.NAME,Test.COUNT));

objs.add(new Test(Test.S_NAME,Test.NAME,Test.COUNT));

NAME = = new String("bbb");

COUNT = = 1l;

}

這樣就很好理解了。變量的聲明和初始化是兩個過程,這樣就能理解NAME為什么是null了,而S_NAME有值。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 静态代码块_JAVA静态代码块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。