声明一个内部静态类:
public class OuterClass {
public static class InnerClass {
}
}
内部静态类普通内部类的不同:
1.普通的内部类对象隐式地保存了外部类的一个引用,用于访问外部类对象,而内部静态类没有这个引用。
2.创建内部静态类的对象,并不需要其外部类对象,而普通内部类需要
3.不能从其内部访问非静态的外部类对象,普通内部类都可以访问
4.静态内部类可以包含static数据,和静态类,普通内部类不行
如果需要创建内部类的非静态类对象,需要使用外部类的实例创建:
public class OuterClass {
public class InnerClass {
public void notice() {
System.out.print("!");
}
}
public static void main(String[] args) {
OuterClass out = new OuterClass();
OuterClass.InnerClass in = out.new InnerClass();
in.notice();
}
}
静态类不需要实例化外部类:
public class OuterClass {
public static class InnerStaticClass {
public void notice() {
System.out.print("!");
}
}
public static void main(String[] args) {
OuterClass.InnerStaticClass in = new OuterClass.InnerStaticClass();
in.notice();
}
}
静态内部类不可以访问外部非类静态对象和方法,普通内部类可以
public class OuterClass {
static String str = "aasd";
String str2 = "aasd";
static void s() {
}
void noStaitcS() {
}
public class InnerClass {
public void notice() {
System.out.print(str2);
System.out.print(str);
s();
noStaitcS();
}
}
public static class InnerStaticClass {
public void notice() {
System.out.print(str2); //编译不通过
noStaitcS(); //编译不通过
System.out.print(str);
s();
}
}
}
静态内部类可以包含static数据,和静态类,普通内部类不行
public static class InnerStaticClass {
public static void notice() {
}
static int a;
static class c1 {
}
}