cmd

          在學(xué)習(xí)webwork案例中碰到了靜態(tài)的內(nèi)部類,抄篇文章來

          (一)
          Java1.1以后版本添加了嵌套類(Inner Class,嵌套類、內(nèi)部類)。嵌套類定義在類(外部類)里面。
          嵌套類可以體現(xiàn)邏輯上的從屬關(guān)系。同時(shí)對于其他類可以控制內(nèi)部類不可見等。
          外部類的成員變量作用域是整個(gè)外部類,包括嵌套類。但外部類不能訪問嵌套類的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); //編譯錯(cuò)
          }
          }

          (二)下面演示了如何在外部類之外實(shí)例出一個(gè)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();
          }
          }
          (三)當(dāng)內(nèi)部類與外部類有同名變量時(shí),缺省指本類中的變量。
          例子:public class Outer {
          private int size;
          public class Inner{
          private size;
          public void doStuff(int size){
          size++; this.size++;
          Outer.this.size++; // 錯(cuò)誤,Outer.size++因?yàn)閟ize不是靜態(tài)變量
          }
          }
          public static void main(String args[]){
          this.size++; //錯(cuò)誤,靜態(tài)方法使用非靜態(tài)變量this
          }
          }
          (四)在方法中定義一個(gè)嵌套類,注意嵌套類不可以訪問方法的局部變量。
          因?yàn)榉椒ǖ木植孔兞恐淮嬖谂c方法作用期間,故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);
          }
          }
          (五)
          嵌套類的類名必須與包裝它的外部類區(qū)別,且嵌套類的類名僅僅可以作用于定義范圍中。方法中定義類,其類名名就只能出現(xiàn)在方法中。
          定義在方法中的嵌套類只能使用定義為final的局部變量,不可以使用方法中的非靜態(tài)變量。
          嵌套類可以使用的變量種類包括:類變量、實(shí)例變量、final局部變量。
          嵌套類同樣具有所有的訪問控制權(quán)限。高級類屬性:
          嵌套類可以是abstract類
          嵌套類可以是接口,被其它嵌套類實(shí)現(xiàn)。
          定義為static的內(nèi)部類將成為頂級類(top-level)。它們不依賴于外部類的對象而生成,所以不可以訪問外部類的對象成員。
          非static內(nèi)部類不能定義static成員
          當(dāng)外部類編譯時(shí),內(nèi)部類也會編譯,生成的類文件格式為:
          OuterClass$InnerClass,如Outer$Inner.class

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

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

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

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

          主站蜘蛛池模板: 桑日县| 武鸣县| 射洪县| 大厂| 原平市| 广丰县| 襄汾县| 舒城县| 峨眉山市| 隆林| 黎城县| 伊金霍洛旗| 新河县| 峨边| 怀化市| 乐都县| 沿河| 开远市| 宜宾市| 吴旗县| 沾益县| 迭部县| 博客| 台东市| 芒康县| 维西| 土默特右旗| 广宁县| 安乡县| 固镇县| 乌恰县| 沙坪坝区| 调兵山市| 金昌市| 泊头市| 昆山市| 双桥区| 噶尔县| 丹棱县| 班玛县| 开阳县|