cmd

          在學習webwork案例中碰到了靜態的內部類,抄篇文章來

          (一)
          Java1.1以后版本添加了嵌套類(Inner Class,嵌套類、內部類)。嵌套類定義在類(外部類)里面。
          嵌套類可以體現邏輯上的從屬關系。同時對于其他類可以控制內部類不可見等。
          外部類的成員變量作用域是整個外部類,包括嵌套類。但外部類不能訪問嵌套類的private成員。例子:
          public class Outer {
          private int size;
          public class Inner{
          private int counter = 10;
          public void doStuff(){ size++; }
          }
          public static void main(String args[]){
          Inner inner= new Inner();
          inner.doStuff();
          System.out.println(size);
          System.out.println(inner.counter);
          System.out.println(counter); //編譯錯
          }
          }

          (二)下面演示了如何在外部類之外實例出一個public Inner類對象。

          類名前加上外部類類名,new語句前加上外部類的引用變量。這很類似package的使用。
          例子:
          public class Outer {
          private int size;
          public class Inner{
          public void doStuff(){ size++; }
          }
          }

          public class TestInner{
          public static void main(String args[]){
          Outer outer = new Outer();
          Outer.Inner inner = outer.new Inner();
          inner.doStuff();
          }
          }
          (三)當內部類與外部類有同名變量時,缺省指本類中的變量。
          例子:public class Outer {
          private int size;
          public class Inner{
          private size;
          public void doStuff(int size){
          size++; this.size++;
          Outer.this.size++; // 錯誤,Outer.size++因為size不是靜態變量
          }
          }
          public static void main(String args[]){
          this.size++; //錯誤,靜態方法使用非靜態變量this
          }
          }
          (四)在方法中定義一個嵌套類,注意嵌套類不可以訪問方法的局部變量。
          因為方法的局部變量只存在與方法作用期間,故localvalue不可訪問。而final變量的生命周期超出了方法,所以fianlvalue可用。
          public class Outer {
          private int size =5;
          public Object makeTheInner(int localvalue){
          final int finalvalue = 6;
          class Inner{
          public String toString(){return (“Inner is”+size+localvalue+finalvalue);}
          }
          return new Inner();
          }

          public static void main(String args[]){
          Outer outer = new Outer();
          Object obj = outer.makeTheInner(47);
          System.out.println(“The object is” + obj);
          }
          }
          (五)
          嵌套類的類名必須與包裝它的外部類區別,且嵌套類的類名僅僅可以作用于定義范圍中。方法中定義類,其類名名就只能出現在方法中。
          定義在方法中的嵌套類只能使用定義為final的局部變量,不可以使用方法中的非靜態變量。
          嵌套類可以使用的變量種類包括:類變量、實例變量、final局部變量。
          嵌套類同樣具有所有的訪問控制權限。高級類屬性:
          嵌套類可以是abstract類
          嵌套類可以是接口,被其它嵌套類實現。
          定義為static的內部類將成為頂級類(top-level)。它們不依賴于外部類的對象而生成,所以不可以訪問外部類的對象成員。
          非static內部類不能定義static成員
          當外部類編譯時,內部類也會編譯,生成的類文件格式為:
          OuterClass$InnerClass,如Outer$Inner.class

          例子:
          class Outer {
          private int size =5;
          static class Inner{
          int value=5;
          public void doStuff(){ size+=value; }// 錯誤,不能訪問非static 外部類程序
          }
          }

          public class TestInner{
          public static void main(String args[]){
          Outer outer = new Outer();
          Inner inner = new Inner();// 這種實例也不對
          應該 Out.Inner innner=new Outer.Inner() ;
          }
          }

          非static內部類不能定義static成員 ,
          (1)定義 static 的 內部類, 如果成員變量也定義成 static ,那么外圍類可以直接通過類名來訪問。
          (2)定義 static 的 內部類, 如果成員變量不是 static ,那么外圍類需要生成內部類的對象才能訪問,否則直接訪問導致編譯出錯!!

          posted on 2006-04-21 01:13 靜夜思 閱讀(239) 評論(0)  編輯  收藏 所屬分類: j2ee基礎

          主站蜘蛛池模板: 桦南县| 天全县| 麦盖提县| 松原市| 柘城县| 松滋市| 天全县| 新民市| 登封市| 莱阳市| 新津县| 全州县| 鄯善县| 长岭县| 绵竹市| 浙江省| 大余县| 客服| 东阿县| 综艺| 宁德市| 阿克苏市| 井冈山市| 南宫市| 江北区| 苍溪县| 涪陵区| 宜章县| 宜兰市| 邛崃市| 安图县| 晋江市| 临湘市| 怀安县| 和顺县| 邹平县| 晋宁县| 额尔古纳市| 封丘县| 咸阳市| 小金县|