<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術平等自由協作創造

    Java專題文章博客和開源

    常用鏈接

    統計

    最新評論

    Java下static關鍵字用法詳解

      Java下static關鍵字用法詳解
      本文章介紹了java下static關鍵字的用法,大部分內容摘自原作者,在此學習并分享給大家。
      Static關鍵字可以修飾什么?
      從以下測試可以看出, static 可以修飾:
      1. 語句塊
      2. 成員變量(但是不能修飾局部變量)
      3. 方法
      4. 接口(內部接口)
      5. 類(只能修飾在類中的類, 即靜態內部類)
      6. jdk 1.5 中新增的靜態導入
      那么static 修飾的表示什么呢? 當創建一個類時,就是在創建一個新類型,描述這個類的對象的外觀和行為,除非用new創建出那個類的對象,數據存儲空間才被分配,其方法才供外界調用。那么當聲明一個事物為static時,就意味著這個域或者方法不會與包含它的那個類的任何對象關聯在一起,也就是說,它不依賴類特定的實例,被類的所有實例共享,只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。
      1. static 修飾語句塊:
      static{} 可以有多處,執行順序按照他們的聲明順序。當JVM加載這個類的時候,就會執行此語句塊,并且只執行一次。
      2. static 變量:
      static 變量,可以被類的所有對象共享,并且它只有一份存儲空間,JVM只為靜態分配一次內存,在加載類的過程中完成靜態變量的內存分配。那么在引用static變量的時候,使用(類名.變量名)是首選的方式,因為他不僅強調它是static結構,而且在某些情況下會為編譯器進行優化提供更好的機會。
      使用類名直接引用static變量是比較力薦的,這樣就很明確的告訴大家該變量或屬性是static結構或是被static修飾。
      但是我想說一個更重要的知識點。static 在類中當變量的重要使用方法,首先樓主先運行一下下面代碼試試:
      public class Person {
      static int[] arr = new int[3];
      public static void main(String[] args){
      Person per1 = new Person();
      Person per2 = new Person();
      Person per3 = new Person();
      System.out.println("----改變之前-----");
      System.out.print("per1-->");
      per1.show();
      System.out.print("per2-->");
      per2.show();
      System.out.print("per3-->");
      per3.show();
      //現在我改變它的值
      Person.arr[2]=10;//這種方法是建議的
      per1.arr[0]=1;//一般不用這種方法
      System.out.println("----改變之后-----");
      System.out.print("per1-->");
      per1.show();
      System.out.print("per2-->");
      per2.show();
      System.out.print("per3-->");
      per3.show();
      }
      //為了方便,封裝一個方法,來解釋
      public void show(){
      for(int i=0; i
      System.out.print(arr[i] + "t");
      }
      System.out.println("");
      }
      }Output:
      ----改變之前-----
      per1-->0t0t0t
      per2-->0t0t0t
      per3-->0t0t0t
      ----改變之后-----
      per1-->1t0t10t
      per2-->1t0t10t
      per3-->1t0t10t
      類似的形式同樣應用在使用static修飾的方法上面(稱為靜態方法)。它可以像普通方法一樣使用對象來引用,也可以通過特殊的語法形式來調用如:“類名”+“ . ”+“方法”(); 定義靜態方法的方式與定義靜態變量一樣:
      public class StaticTest2 {
      static void method(){ ("這是靜態方法"); }
      }
      普通的調用方法:StaticTest2 st = new StaticTest2(); 因為method是static修飾的(靜態方法),所以可以這樣調用:StaticTest2.()。
      3. static方法:
      static方法與非static方法的區別在于: static方法可以用類名直接訪問在static內部的變量和方法,而不能引用非static的變量或者方法,但是你可以通過傳遞參數的方式傳遞一個引用,讓這個引用去調用非靜態數據。
      4. static 接口:
      內部接口(inner interface)本身就默認是static,所以static關鍵詞加與不加都是一樣的, 如此例中的接口:TestInInterface,TestInClass 實現此接口, 以下語句:
      StaticDescription.TestInInterface a = new StaticDescription.TestInClass();
      a.print();
      我們去掉static關鍵字也是一樣的, 但還是受訪問權限控制TestInterface和FF。
      5. static 修飾類:
      表示它是一個靜態內部類,它在引用外部類的事物時,必須也是static的。而且, 靜態內部類在創建自己的對象時, 是不需要外圍類的存在。就好像下面的部分:
      class Member {
      static int classVar = 0; //類變量
      int instanceVar; //實例變量
      Member(int instanceVar) {
      this.instanceVar = instanceVar;
      }
      static void setClassVar(int i) {
      classVar=i;
      //instanceVar=i; // 類方法不能訪問實例變量,只能訪問類變量
      }
      static int getClassVar() {//類方法
      return classVar;
      }
      void setInstanceVar(int i) {
      classVar=i; //實例方法不但可以訪問類變量,也可以實例變量
      instanceVar=i;
      }
      int getInstanceVar() {
      return instanceVar;
      }
      }
      Member未實例化: Member實例化之后:
    1
      對于非靜態數據成員,每個類對象都有自己的拷貝。而靜態數據成員被當作是類的成員。無論這個類的對象被定義了多少個,靜態數據成員在程序中也只有一份拷貝,由該類型的所有對象共享訪問。也就是說,靜態數據成員是該類的所有對象所共有的。對該類的多個對象來說,靜態數據成員只分配一次內存,供所有對象共用。所以,靜態數據成員的值對每個對象都是一樣的,它的值可以更新托福答案
      Member m1 = new Member();
      Member m2 = new Member();
      內存分配
    2
      引用static變量有兩種方法。如前例所示,可以通過一個對象去定位它,如m1.classVar; 也可以通過其類名直接引用,如Member.classVar,而對于非靜態成員則不行。
      盡管當static作用于某個字段時,肯定會改變數據的創建方式(因為一個static字段對每個類來說都只有一份存儲空間,而非static字段則是對每個對象都有一個存儲空間),但是如果static用于某個方法,差別卻沒有那么大。static方法的一個重要用法就是在不創建任何對象的前提下就可以調用它。這一點,對定義main()方法很重要,這個方法是運行一個應用時的入口點。
      static方法就是沒有this的方法。在static方法的內部不能調用非靜態方法,反過來倒是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。它很像全局方法。Java中禁止使用全局方法,但你在類中置入static方法就可以訪問其他static方法和static域托福答案
      和其他任何方法一樣,static方法可以創建或使用與其類型相同的被命名對象,因此,static方法通常拿來做“牧羊人”的角色,負責看護與其奴隸同一類型的實例群。
      不過,要是在代碼中出現大量的static方法,就該重新考慮自己的設計了

    posted on 2014-08-25 21:54 好不容易 閱讀(210) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 在线观看亚洲电影| 免费无码午夜福利片 | 国产伦精品一区二区三区免费迷| 国产午夜精品理论片免费观看| 亚洲精品国偷自产在线| 91精品免费国产高清在线| 亚洲国产成人AV网站| 青青久在线视频免费观看| 男男gay做爽爽的视频免费| 亚洲人成网77777色在线播放| 国产亚洲视频在线观看| 亚洲AV无码1区2区久久| 成人免费777777| a级毛片视频免费观看| 亚洲中文字幕无码久久综合网| 91精品免费久久久久久久久| 亚洲视频在线免费看| 99精品热线在线观看免费视频| 亚洲av网址在线观看| 国产无遮挡吃胸膜奶免费看视频 | 亚洲美女人黄网成人女| 尤物永久免费AV无码网站| 久久亚洲免费视频| 亚洲精品国产福利在线观看| 无码不卡亚洲成?人片| 免费国产成人高清在线观看网站 | 亚洲高清视频免费| 一级女人18片毛片免费视频| 亚洲乱码精品久久久久..| 成全视频免费高清| 91福利视频免费观看| 亚洲综合精品第一页| 亚洲国产国产综合一区首页| 99re6免费视频| 特色特黄a毛片高清免费观看| 亚洲开心婷婷中文字幕| 国产免费AV片无码永久免费| 67194成是人免费无码| 131美女爱做免费毛片| 国产麻豆成人传媒免费观看 | 在线免费观看视频你懂的|