我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          Static和Final修飾類屬性變量及初始化

          1.static修飾一個屬性字段,那么這個屬性字段將成為類本身的資源,public修飾為共有的,可以在類的外部通過test.a來訪問此屬性;在類內部任何地方可以使用.如果被修飾為private私有,那么只能在類內部使用.


           

          public class Test{
          public static int a;
          private Test(){
          a
          =0;
          }

          }

           

           

          如果屬性被修飾為static靜態類資源,那么這個字段永遠只有一個,也就是說不管你new test()多少個類的對象,操作的永遠都只是屬于類的那一塊內存資源.例如:


           

          Test t1=new Test();
          t1.a
          =10;
          Test t2
          =new Test();
          System.out.println(t1.a);
          System.out.println(t2.a);
          System.out.println(Test.a);

           

           

          結果是3個0


          2.final 用于聲明屬性,方法和類,分別表示屬性一旦被分配內存空間就必須初始化并且以后不可變,方法一旦定義必須有實現代碼并且子類里不可被覆蓋,類一旦定義不能被定義為抽象類或是接口,因為不可被繼承。


          而你的代碼里對final修飾的屬性進行了修改,所以錯誤.


          3. 被final修飾而沒有被static修飾的類的屬性變量只能在兩種情況下初始化:


          a.在它被定義的時候,例:

           

           

          public class Test{
          public final int a=0;
          private Test(){
          }

          }

           

           

          b.在構造函數里初始化,例:

           

           

          public class Test{
          public final int a;
          private Test(){
          a
          =0;
          }

          }


           

           

          4.同時被final和static修飾的類的屬性變量只能在兩種情況下初始化:


          a.在它被定義的時候,例:

           

           

          public class Test{
          public final int a=0;
          private Test(){
          }

          }


           

           

          b.在類的靜態塊里初始化,例:

           

           

          public class Test{
          public final int a;
          static{
          a
          =0;
          }

          }


           

           

          5.分析第三第四原因:


          第三條:當這個屬性被修飾為final,而非static的時候,它屬于類的實例對象的資源,當類被加載進內存的時候這個屬性并沒有給其分配內存空間,而只是定義了一個變量a,只有當類被實例化的時候這個屬性才被分配內存空間,而實例化的時候同時執行了構造函數,所以屬性被初始化了,也就符合了當它被分配內存空間的時候就需要初始化,以后不再改變的條件.


          第四條:當類的屬性被同時被修飾為static和final的時候,他屬于類的資源,那么就是類在被加載進內存的時候(也就是應用程序啟動的時候)就要已經為此屬性分配了內存,所以此時屬性已經存在,它又被final修飾,所以必須在屬性定義了以后就給其初始化值.而構造函數是在當類被實例化的時候才會執行,所以用構造函數,這時候這個屬性沒有被初始化.程序就會報錯.而static塊是類被加載的時候執行,且只執行這一次,所以在static塊中可以被初始化.

           



          posted on 2007-12-22 15:45 々上善若水々 閱讀(1058) 評論(0)  編輯  收藏 所屬分類: J2SE

          主站蜘蛛池模板: 兴仁县| 河池市| 思南县| 胶州市| 田阳县| 苗栗县| 宁德市| 尉犁县| 博乐市| 垦利县| 临漳县| 延津县| 湟中县| 西昌市| 和政县| 长泰县| 枝江市| 岗巴县| 武定县| 上饶县| 咸丰县| 历史| 木里| 安龙县| 资源县| 韶关市| 宁蒗| 岳池县| 古丈县| 福安市| 舟曲县| 灵璧县| 玉树县| 遂昌县| 永兴县| 麦盖提县| 临湘市| 凌云县| 子洲县| 客服| 永顺县|