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基礎

          主站蜘蛛池模板: 天气| 扎赉特旗| 庄浪县| 富蕴县| 敦化市| 唐河县| 肇州县| 林口县| 东丽区| 文昌市| 灌阳县| 白山市| 蒙山县| 肥乡县| 恩施市| 平谷区| 旌德县| 茂名市| 安康市| 斗六市| 冷水江市| 贵定县| 伊通| 临漳县| 安平县| 平湖市| 宁都县| 蚌埠市| 巴彦淖尔市| 雷山县| 灵宝市| 南部县| 贡嘎县| 甘孜县| 南阳市| 武威市| 台前县| 景谷| 汕头市| 永靖县| 虎林市|