Java中final變量的初始化方式


原文轉自:http://blog.csdn.net/zhangjk1993/article/details/24196847

 1 public class FinalTest1 {
 2     //-----------------成員變量------------------//
 3     //初始化方式一,在定義變量時直接賦值
 4     private final int i = 3;
 5 
 6     //初始化方式二,聲明完變量后在構造方法中為其賦值
 7     //如果采用用這種方式,那么每個構造方法中都要有j賦值的語句
 8     private final int j;
 9 
10     public FinalTest1() {
11         j = 3;
12     }
13 
14     //如果取消該構造方法的注釋,程序就會報錯,因此它沒有為j賦值
15     /*public FinalTest1(String str) {
16 
17     }*/
18 
19     //為了方便我們可以這樣寫
20     public FinalTest1(String str) {
21         this();
22     }
23 
24     //下面的代碼同樣會報錯,因為對j重復賦值
25     /*public FinalTest1(String str1, String str2) {
26         this();
27         j = 3;//The final field j may already have been assigned
28     }*/
29 
30 
31     //初始化方式三,聲明完變量后在構造代碼塊中為其賦值
32     //如果采用此方式,就不能在構造方法中再次為其賦值
33     //構造代碼塊中的代碼會在構造函數之前執行,如果在構造函數中再次賦值,
34     //就會造成final變量的重復賦值
35     private final int k;
36 
37     {
38         k = 4;
39     }
40 
41     //-----------------類變量(靜態變量)------------------//
42     //初始化方式一,在定義類變量時直接賦值
43     public final static int p = 3;
44 
45     //初始化方式二,在靜態代碼塊中賦值
46     //成員變量可以在構造函數中賦值,但是類變量卻不可以。
47     //因此成員變量屬於對象獨有,每個對象創建時只會調用一次構造函數,
48     //因此可以保證該成員變量只被初始化一次;
49     //而類變量是該類的所有對象共有,每個對象創建時都會對該變量賦值
50     //這樣就會造成變量的重復賦值。
51     public final static int q;
52 
53     static {
54         q = 3;
55     }
56 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM