如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
1)事实上,与前相同,静态内部类也就类似一个类的静态成员方法,它不需要外部类的对象而直接由外部类创建。
2)类似一个类的静态成员方法,它只能访问外部类的静态成员,而不能访问非静态成员。
3)静态内部类中可以定义静态成员,当然也可以定义非静态成员。而其它的内部类都不能定义静态成员。
4)在类外部生成一个静态内部类也和在类外部调用静态方法一样,直接用外部类名创建,如下例:
Outer.Inner in = new Outer.Inner()
首先 类之间是可以嵌套的。其次 内部类一般常用的有:
1、普通内部类 即:直接在一个类的内部定义另外一个类
创建内部类时,外部类的对象必须已经创建
即:例子
public class Class1{
int i
class Inner{
static int j//这是错误的
int j//正确
private void getData() {
i = 2
}
}
}
Class1.Inner inner = new StringSplit().new Inner()
实例内部类会持有外部类的引用
即:上例中的 i = 2等价于 Class1.this.i = 2
实例内部类不能定义static静态成员变量,只能定义实例成员变量
2、静态内部类
不会持有外部类的引用,若要使用外部类的成员变量,则需生成外部类的对象
创建时可以没有外部类的实例 即:
public class Class1{
static int i
int k
static class Inner{
static int j//这是错误的
int j//正确
private void getData() {
i = 2//上面i为静态,此处正确,否则错误
Class1 class1 = new Class1()
class1.k//正确
}
}
}
Class1.Inner inner = new Class1.Inner()
可以访问外部类的静态变量