熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

static內部類

2013-11-23 19:31:43  來源: Java核心技術 

  為正確理解static在應用於內部類時的含義必須記住內部類的對象默認持有創建它的那個封裝類的一個對象的句柄然而假如我們說一個內部類是static的這種說法卻是不成立的static內部類意味著
  
  () 為創建一個static內部類的對象我們不需要一個外部類對象
  
  () 不能從static內部類的一個對象中訪問一個外部類對象
  
  但在存在一些限制由於static成員只能位於一個類的外部級別所以內部類不可擁有static數據或static內部類
  
  倘若為了創建內部類的對象而不需要創建外部類的一個對象那麼可將所有東西都設為static為了能正常工作同時也必須將內部類設為static如下所示
  
  //: Parceljava
  // Static inner classes
  package cparcel;
  
  abstract class Contents {
   abstract public int value();
  }
  
  interface Destination {
   String readLabel();
  }
  
  public class Parcel {
   private static class PContents
   extends Contents {
    private int i = ;
    public int value() { return i; }
   }
   protected static class PDestination
     implements Destination {
    private String label;
    private PDestination(String whereTo) {
     label = whereTo;
    }
    public String readLabel() { return label; }
   }
   public static Destination dest(String s) {
    return new PDestination(s);
   }
   public static Contents cont() {
    return new PContents();
   }
   public static void main(String[] args) {
    Contents c = cont();
    Destination d = dest(Tanzania);
   }
  } ///:~
  
  在main()中我們不需要Parcel的對象相反我們用常規的語法來選擇一個static成員以便調用將句柄返回Contents和Destination的方法
  
  通常我們不在一個接口裡設置任何代碼但static內部類可以成為接口的一部分由於類是靜態所以它不會違反接口的規則——static內部類只位於接口的命名空間內部
  
  //: IInterfacejava
  // Static inner classes inside interfaces
  
  interface IInterface {
   static class Inner {
    int i j k;
    public Inner() {}
    void f() {}
   }
  } ///:~
  
  在本書早些時候我建議大家在每個類裡都設置一個main()將其作為那個類的測試床使用這樣做的一個缺點就是額外代碼的數量太多若不願如此可考慮用一個static內部類容納自己的測試代碼如下所示
  
  //: TestBedjava
  // Putting test code in a static inner class
  
  class TestBed {
   TestBed() {}
   void f() { Systemoutprintln(f()); }
   public static class Tester {
    public static void main(String[] args) {
     TestBed t = new TestBed();
     tf();
    }
   }
  } ///:~
  
  這樣便生成一個獨立的名為TestBed$Tester的類(為運行程序請使用java TestBed$Tester命令)可將這個類用於測試但不需在自己的最終發行版本中包含它
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27032.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.