Nov 27

10F_java-icon Java中我们经常会使用到内部类(inner classes),如果没有Static的内部类,它的instance的创建是依赖于其元类的。这样的关系似乎比较难表达,让我们直接看下面的代码:


   1:  public class Outer {
   2:      int var;
   3:  
   4:      void outerHoge() {
   5:          System.out.println(“hogehoge”);
   6:      }
   7:  
   8:      void outerHote2() {
   9:          /* 普通内部类Instance的生成 */
  10:          Inner i = new Inner();
  11:          staticHoge sh = new StaticHoge();
  12:  
  13:          /* 非static的内部类,下面的写法看起来很正常,
  14:           * 语法上似乎也没什么错误,实际上却是错误的
  15:           * (编译错误)
  16:           */
  17:  //        Inner i2 = new this.Inner();
  18:      }
  19:  
  20:      /* 依赖于元类的内部类*/
  21:      class Inner {
  22:          void innerHoge() {
  23:              /* 依赖于Instance的内部变量
  24:               * 
  25:               */
  26:              var = 1;
  27:              outerHoge();
  28:          }
  29:      }
  30:  
  31:      static class StaticHoge() {
  32:          void methodHoge() {
  33:              /* 下面的写法是不对的
  34:               * 同样是编译错误
  35:               */
  36:  //            var = 10;
  37:  //            outerHoge();
  38:  //            Inner inner = new Inner();
  39:          }
  40:      }
  41:  }

static的内部类的使用,我们可以像Package一样用它:

   1:  public class Outer2 {
   2:      public static class StaticHoge1 {
   3:          //…
   4:      }
   5:      public static class StaticHoge2 {
   6:          //…
   7:      }
   8:  }
可以像下面这样使用:

   1:  Outer2.StaticHoge1 sh1 = new Outer2.StaticHoge1();
   2:  Outer2.StaticHoge2 sh2 = new Outer2.StaticHoge2();

是不是很方便?

不过对于内部的Static类,需要注意下面几点:

●为创建一个static内部类的对象,我们不需要一个外部类对象

●不能从static内部类的一个对象中访问一个外部类对象

●由于static成员只能位于一个类的外部级别,所以内部类不可拥有static数据或static内部类

written by Minidxer  |  tags: , , , , , , , ,

Related Post

Leave a Reply