静态内部类(转帖)

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

请问这是不是说明,内部类不适合序列化?
感觉在使用序列化时有内部类是很危险的

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

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