麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

深入理解final變量的初始化

2019-11-26 16:03:57
字體:
供稿:網(wǎng)友
final變量的初始化位置 
一是其定義處,也就是說在final變量定義時直接給其賦值,
二是在構(gòu)造函數(shù)中。而且在Java1.1以前,只能是在定義時給值。
三是在初如化代碼塊中{} 或者 static{}
復(fù)制代碼 代碼如下:

public class InitOrder {
    {
        System.out.println("before---field");
        //System.out.println("d1="+d1);
        d1 = 3;
        //System.out.println("d1="+d1);
    }
    static {
        System.out.println("before---static field");
        //System.out.println("d2="+d2);
        d2 = 3;
        //System.out.println("d2="+d2);
    }
    final int a1 = 1;
    final int b1;
    final int c1;
    final int d1;
    //final int e1;
    static final int a2 = 1;
    //static final int b2;
    static final int c2;
    static final int d2;
    //static final int e2;

    {
        System.out.println("after---field");
        //System.out.println("c1="+c1);
        c1 = 4;
        System.out.println("c1="+c1);
        //e2 =3;
    }
    static {
        System.out.println("after---static field");
        //System.out.println("c2="+c2);
        c2 = 4;
        System.out.println("c2="+c2);
        //e1 = 3;
    }
    public InitOrder() {
        b1 = 2;
        //b2 = 2;
    }
    public static void main(String[] args) {
        InitOrder order = new InitOrder();
        System.out.println("c1="+order.c1);
        System.out.println("c2="+order.c2);
        System.out.println("d1="+order.d1);
        System.out.println("d2="+order.d2);
    }
}

說明:上述所有注釋皆為有語法錯誤
輸出結(jié)果:
before---static field
after---static field
c2=4
before---field
after---field
c1=4
c1=4
c2=4
d1=3
d2=3
結(jié)果分析:
1. 對比a1,a2基本沒有什么問題,定義時就初始化
2. 對比b1,b2在構(gòu)造函數(shù)中初始化,b1沒有問題,b2有問題,這是因為構(gòu)造函數(shù)的調(diào)用在靜態(tài)變量的后面而b2是靜態(tài)的,所以會報錯
3. 對比c1,d1發(fā)現(xiàn)初始化沒有問題,有問題的是使用輸出語句。對于d1在初始化代碼塊中不論在哪加輸出語句都會報錯,這是因為d1所在的初始化代碼塊位置在變量d1定義的前面,而java中變量的初始化順序是見Java中變量的初始化順序, 普通變量和初始化代碼塊的初始化順序是按照位置的先后的所以輸出用到了d1變量,所以出錯,但有一點我不明白,為什么在這里初始化d1不報錯,而且在main函數(shù)中還可以調(diào)用它,難道這個也要去看一下java虛擬機?對于c1在后面加輸出語句沒有問題。前面加有問題很好理解,就是大之前沒有被初始化.
4. 對于c2,d2是和3同樣的道理
5. 對于e1放在靜態(tài)代碼塊中顯然不行,因為靜態(tài)代碼塊最先加載,那時e1還沒有加
6. 對于e2也是,普通代碼塊的加載要晚于靜態(tài)變量,所以也是不行的。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 91午夜在线观看 | 久久老司机 | 精品久久久一二三区播放播放播放视频 | 欧洲成人一区 | 国产成年人小视频 | 精品国产一区三区| 国产免费久久久久 | 在线亚洲播放 | 日日夜av| 国产又白又嫩又紧又爽18p | 国产精品视频一区二区三区四 | 久久骚| 成人一区二区在线观看视频 | 国产一级淫片免费看 | 国产一级免费视频 | 久久国产经典 | 男人的天堂毛片 | 狠狠色成色综合网 | 久久久久久久久日本理论电影 | 毛片网站视频 | 蜜桃免费在线 | 国产亚洲欧美一区久久久在 | 日韩视频高清 | 久久精品99国产国产精 | 精品国产一区二区三区四区在线 | xxnxx中国18 | 黄色毛片视频在线观看 | 久久不雅视频 | 久久丝袜脚交足黄网站免费 | 免费看真人a一级毛片 | 人人舔人人舔 | 国产欧美日韩视频在线观看 | 久久久久免费电影 | 依依成人精品视频 | 国产一级桃视频播放 | 久久亚洲美女视频 | 999插插插| 日本aaaa片毛片免费观看视频 | 日本精品视频一区二区三区四区 | 久久免费精品视频 | 色吧综合网|