Java 的内部类一般情况下很少使用,声明为 static 的静态内部类的使用就更少了。
也仅仅只有内部类能够被声明为static类型,通常我们声明一个普通类的时候不能使用 static 的。
前面提到过,编译器会自动给内部类加上一个引用,指向产生它的那个外部类的对象:[url]http://ezerg.iteye.com/blog/1064476[/url]
如果不想要或者说不需要这个引用,那么我们就可以把这个内部类声明为 static ,但另外还有两个注意问题:
1、允许:将某个内部类修饰为静态类,才能够在这个类中定义静态的成员变量与成员方法,同时被外部类的静态方法使用。
2、限制:在静态内部类中,只能够引用外部类中的静态的变量,而不能够访问非静态的变量。原因很简单,外部类的引用不存在了。
也仅仅只有内部类能够被声明为static类型,通常我们声明一个普通类的时候不能使用 static 的。
前面提到过,编译器会自动给内部类加上一个引用,指向产生它的那个外部类的对象:[url]http://ezerg.iteye.com/blog/1064476[/url]
如果不想要或者说不需要这个引用,那么我们就可以把这个内部类声明为 static ,但另外还有两个注意问题:
1、允许:将某个内部类修饰为静态类,才能够在这个类中定义静态的成员变量与成员方法,同时被外部类的静态方法使用。
2、限制:在静态内部类中,只能够引用外部类中的静态的变量,而不能够访问非静态的变量。原因很简单,外部类的引用不存在了。
public class OuterClass { // OuterClass 不能声明为 static
private static String outerTest = ""; // 去掉 static 后 innerTest 则不能取到 outerTest
public static InnerClass getInnerClass() {
return new InnerClass();
}
static class InnerClass { // 去掉 static 后 getInnerClass 方法报错,innerTest 变量也不能为静态
private static String innerTest = outerTest;
// 省略
}
}