大漠駝鈴

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

          java中 static, final, super, this學(xué)習(xí)和總結(jié)

          一直依賴都比較模糊,今天早上看了幾個(gè)帖子總結(jié)一下,供自己和大家參考,如果有不對(duì)的地方還請(qǐng)大家指點(diǎn)。
          先說一下static

          static 可以是變量、方法、內(nèi)部類(類不能為static型)
          1、static變量
           類裝載時(shí)只分配一塊存儲(chǔ)空間,所有此類的對(duì)象都可以操控此類的存儲(chǔ)空間。
           static 變量?jī)?yōu)于任何非static變量初始化,而且只初始化一次, static代碼塊也只會(huì)初始化一次。
            靜態(tài)變量可以直接訪問
          2、static方法
          無需實(shí)例化類即可使用(類名、方法名),方法內(nèi)部不能用this,super關(guān)鍵字, 不能訪問所屬類的實(shí)例變量和實(shí)例方法,只能訪問所屬類的靜態(tài)變量和靜態(tài)方法。static方法獨(dú)立于任何實(shí)例, 并且不能為 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) {  
                   //直接使用 類名.靜態(tài)方法名()  
                   System.out.println("TestStatic.staticValue");  
                   TestStatic.setStaticValue("static value");  
           
                   
                   TestStatic t1 = new TestStatic();  
                   TestStatic t2 = new TestStatic();  
            
                  //t1, t2存取到的值應(yīng)該是一樣的  
                   System.out.println("from t1:staticValue=" + t1.getStaticValue()  
                   System.out.println("from t2:staticValue=" + t2.getStaticValue());  
                   //通過對(duì)象t1改變static變量  
                  System.out.println("t1.staticValue");  
                   t1.setStaticValue("t1");  
                   //t1, t2存取到的值應(yīng)該是一樣的  
                   System.out.println("from t1:staticValue=" + t1.getStaticValue());  
                   System.out.println("from t2:staticValue=" + t2.getStaticValue());  
           
                   //通過對(duì)象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) {  
                  //直接通過 類名.靜態(tài)變量 存取  
                  TestStatic.staticValue = staticValue;  
              }  
                
               public String accessStaticValue () {  
                   value = staticValue;    //普通的方法可以存取static 方法或 static變量  
                    
                  return staticValue;  
               }  



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


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

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

          final變量可以先定義,后賦值。
          final形參 可以讀取該參數(shù)值,不能改變?cè)搮?shù)值

          package org.leizhimin;

          public class Test3 {
          private final String S="final實(shí)例變量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空白,必須在初始化對(duì)象的時(shí)候賦初值

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

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

          System.out.println(t.A);
          System.out.println(t.B);
          System.out.println(t.C); 
          //不推薦用對(duì)象方式訪問靜態(tài)字段
          System.out.println(t.D); //不推薦用對(duì)象方式訪問靜態(tài)字段
          System.out.println(Test3.C);
          System.out.println(Test3.D);
          //System.out.println(Test3.E); //出錯(cuò),因?yàn)镋為final空白,依據(jù)不同對(duì)象值有所不同.
          System.out.println(t.E);

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

          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空白,在需要的時(shí)候才賦值
          final int b=4//局部常量--final用于局部變量的情形
          final int c; //final空白,一直沒有給賦值.
          a=3;
          //a=4; 出錯(cuò),已經(jīng)給賦過值了.
          //b=2; 出錯(cuò),已經(jīng)給賦過值了.
          }
          }



          this和super

          this只當(dāng)前對(duì)象, 尤其是區(qū)分 形參和類的屬性時(shí)

          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(); //調(diào)用父類構(gòu)造函數(shù)(1)
          prt("A chinese.");//(4)
          }
          Chinese(String name){
          super(name);//調(diào)用父類具有相同形參的構(gòu)造函數(shù)(2)
          prt("his name is:"+name);
          }
          Chinese(String name,
          int age){
          this(name);//調(diào)用當(dāng)前具有相同形參的構(gòu)造函數(shù)(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 變量、成員方法
          變量一旦給復(fù)制就不能修改并且可以通過類名直接訪問
          方法不能覆蓋,可以通過類名直接訪問

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

          主站蜘蛛池模板: 邵阳市| 陆良县| 巴塘县| 新营市| 聂荣县| 怀宁县| 南丰县| 绥宁县| 天等县| 茌平县| 西华县| 南召县| 景德镇市| 辉县市| 宝应县| 香河县| 合水县| 米脂县| 巴南区| 平原县| 公主岭市| 车险| 长寿区| 普陀区| 永德县| 庄河市| 永川市| 沭阳县| 苍溪县| 改则县| 广灵县| 太仓市| 沾化县| 郁南县| 高平市| 朝阳区| 塘沽区| 额济纳旗| 庆元县| 苏尼特右旗| 长顺县|