静态内部类(转帖)

09-11-16 DLUTkaka

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内部类

banq
2009-11-17 14:04

相关文章:

Static inner classes for fun and profit

DLUTkaka
2009-11-20 13:56

请问这是不是说明,内部类不适合序列化?

感觉在使用序列化时有内部类是很危险的

DLUTkaka
2009-11-20 14:21

使用静态内部类的话,就意味着丧失继承的特性,如果我这个内部类是定义在基类中的话。只能调用静态方法,这几乎没有意义。

banq
2009-11-20 18:00

静态 和内部类都是两个需要少用的,少+少=更少。静态内部类更稀有。