大漠駝鈴

          置身浩瀚的沙漠,方向最為重要,希望此blog能向大漠駝鈴一樣,給我方向和指引。
          Java,Php,Shell,Python,服務器運維,大數據,SEO, 網站開發、運維,云服務技術支持,IM服務供應商, FreeSwitch搭建,技術支持等. 技術討論QQ群:428622099
          隨筆 - 238, 文章 - 3, 評論 - 117, 引用 - 0
          數據加載中……

          java中 static, final, super, this學習和總結

          一直依賴都比較模糊,今天早上看了幾個帖子總結一下,供自己和大家參考,如果有不對的地方還請大家指點。
          先說一下static

          static 可以是變量、方法、內部類(類不能為static型)
          1、static變量
           類裝載時只分配一塊存儲空間,所有此類的對象都可以操控此類的存儲空間。
           static 變量優于任何非static變量初始化,而且只初始化一次, static代碼塊也只會初始化一次。
            靜態變量可以直接訪問
          2、static方法
          無需實例化類即可使用(類名、方法名),方法內部不能用this,super關鍵字, 不能訪問所屬類的實例變量和實例方法,只能訪問所屬類的靜態變量和靜態方法。static方法獨立于任何實例, 并且不能為 abstract抽象方法。

          舉例:
          public class TestStatic {  
               private static String staticValue = "";  
              @SuppressWarnings("unused")  
              private String value;  
               
               public TestStatic() {  
                   super();  
               }  

              @SuppressWarnings("static-access")  
               public static void main(String []args) {  
                   //直接使用 類名.靜態方法名()  
                   System.out.println("TestStatic.staticValue");  
                   TestStatic.setStaticValue("static value");  
           
                   
                   TestStatic t1 = new TestStatic();  
                   TestStatic t2 = new TestStatic();  
            
                  //t1, t2存取到的值應該是一樣的  
                   System.out.println("from t1:staticValue=" + t1.getStaticValue()  
                   System.out.println("from t2:staticValue=" + t2.getStaticValue());  
                   //通過對象t1改變static變量  
                  System.out.println("t1.staticValue");  
                   t1.setStaticValue("t1");  
                   //t1, t2存取到的值應該是一樣的  
                   System.out.println("from t1:staticValue=" + t1.getStaticValue());  
                   System.out.println("from t2:staticValue=" + t2.getStaticValue());  
           
                   //通過對象t2改變static變量  
                   System.out.println("t2.staticValue");  
                  t2.setStaticValue("t2");  
                  //t1 受到影響  
                   System.out.println("from t1:staticValue=" + t1.getStaticValue());  
               }  
                
               public static String getStaticValue() {  
                  return staticValue;  
              }  
                
              public static void setStaticValue(String staticValue) {  
                  //直接通過 類名.靜態變量 存取  
                  TestStatic.staticValue = staticValue;  
              }  
                
               public String accessStaticValue () {  
                   value = staticValue;    //普通的方法可以存取static 方法或 static變量  
                    
                  return staticValue;  
               }  



          final 可以變量、方法、類
          根據程序上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設計或效率。
          final類不能被繼承,沒有子類,final類中的方法默認是final的。
          final方法不能被子類的方法覆蓋,但可以被繼承。
          final成員變量表示常量,只能被賦值一次,賦值后值不再改變。
          final不能用于修飾構造方法。
          注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。


          1、final變量
          一旦初始化就不能改變,基本類型的值不可改變,對象變量的引用不可以改變。final變量初始化的位置 一般位于定義處或者構造函數中。final方法中的final參數,值也不會改變。
          2、final方法
          不能被覆蓋,主要作用就是把方法鎖定,防止任何可繼承該類的子類改變它的實現。
          3final 類

          final類不能被繼承,final類中變量可以為final也可以不為,但是final中的方法自然為final類型。

          final變量可以先定義,后賦值。
          final形參 可以讀取該參數值,不能改變該參數值

          package org.leizhimin;

          public class Test3 {
          private final String S="final實例變量S";
          private final int A=100;
          public final int B=90;

          public static final int C=80;
          private static final int D=70;

          public final int E; //final空白,必須在初始化對象的時候賦初值

          public Test3(int x){
          E
          =x;
          }

          /**
          @param args
          */
          public static void main(String[] args) {
          Test3 t
          =new Test3(2);
          //t.A=101; //出錯,final變量的值一旦給定就無法改變
          //t.B=91; //出錯,final變量的值一旦給定就無法改變
          //t.C=81; //出錯,final變量的值一旦給定就無法改變
          //t.D=71; //出錯,final變量的值一旦給定就無法改變

          System.out.println(t.A);
          System.out.println(t.B);
          System.out.println(t.C); 
          //不推薦用對象方式訪問靜態字段
          System.out.println(t.D); //不推薦用對象方式訪問靜態字段
          System.out.println(Test3.C);
          System.out.println(Test3.D);
          //System.out.println(Test3.E); //出錯,因為E為final空白,依據不同對象值有所不同.
          System.out.println(t.E);

          Test3 t1
          =new Test3(3);
          System.out.println(t1.E); 
          //final空白變量E依據對象的不同而不同
          }

          private void test(){
          System.out.println(
          new Test3(1).A);
          System.out.println(Test3.C);
          System.out.println(Test3.D);
          }

          public void test2(){
          final int a; //final空白,在需要的時候才賦值
          final int b=4//局部常量--final用于局部變量的情形
          final int c; //final空白,一直沒有給賦值.
          a=3;
          //a=4; 出錯,已經給賦過值了.
          //b=2; 出錯,已經給賦過值了.
          }
          }



          this和super

          this只當前對象, 尤其是區分 形參和類的屬性時

          super只的是父類

          舉例:
          class Person{
          public static void prt(String s){
          System.out.println(s);
          }
          Person(){
          prt(
          "A Person.");
          }
          Person(String name){
          prt(
          "A person name is:"+name);
          }
          }
          public class Chinese extends Person{
          Chinese(){
          super(); //調用父類構造函數(1)
          prt("A chinese.");//(4)
          }
          Chinese(String name){
          super(name);//調用父類具有相同形參的構造函數(2)
          prt("his name is:"+name);
          }
          Chinese(String name,
          int age){
          this(name);//調用當前具有相同形參的構造函數(3)
          prt("his age is:"+age);
          }
          public static void main(String[] args){
          Chinese cn
          =new Chinese();
          cn
          =new Chinese("kevin");
          cn
          =new Chinese("kevin",22);
          }
          }

          final static 變量、成員方法
          變量一旦給復制就不能修改并且可以通過類名直接訪問
          方法不能覆蓋,可以通過類名直接訪問

          posted on 2009-02-10 11:59 草原上的駱駝 閱讀(567) 評論(0)  編輯  收藏 所屬分類: JAVA基礎知識

          主站蜘蛛池模板: 丹东市| 江华| 宁都县| 区。| 南宁市| 华安县| 盖州市| 高雄市| 衡东县| 河西区| 长治县| 泰和县| 三穗县| 莫力| 交口县| 抚州市| 海安县| 沁阳市| 三穗县| 涪陵区| 贵州省| 梅河口市| 家居| 炉霍县| 莱芜市| 永丰县| 乌鲁木齐县| 开平市| 宁阳县| 曲麻莱县| 荆门市| 德州市| 咸阳市| 仙桃市| 泸定县| 新疆| 济宁市| 甘洛县| 潼关县| 玛纳斯县| 芒康县|