返回
JAVA筑基第30天:STATIC内部类不那么“STATIC”的一面
后端
2024-02-24 23:48:27
今天是JAVA筑基的第30天,也是和大家聊JAVA高级技术—内部类的最后一天。在前三天的文章中,我们已经了解了内部类的基本概念、成员内部类、局部内部类和匿名内部类。今天,我们来聊聊最后一个也是比较特殊的一个内部类——STATIC内部类。
说到STATIC,大家都会想到“静态”,而说到“静态”,又很容易想到“类变量”和“类方法”。没错,STATIC内部类确实可以使用类变量和类方法。但它和我们平时理解的STATIC又有一些不同。
首先,STATIC内部类只能在类内部声明,不能在方法内部声明。这意味着,STATIC内部类和成员内部类一样,都是属于外部类的成员。
其次,STATIC内部类只能访问外部类的静态成员,不能访问外部类的非静态成员。换句话说,STATIC内部类只能访问外部类的类变量和类方法,而不能访问外部类的实例变量和实例方法。
第三,STATIC内部类不能访问外部类的构造函数。这意味着,STATIC内部类不能直接创建外部类的实例。
第四,STATIC内部类可以单独编译。这意味着,我们可以把STATIC内部类单独放在一个文件中,然后用javac命令编译它。编译后的STATIC内部类文件是一个普通的class文件,可以被其他类引用。
public class OuterClass {
private int a; // 实例变量
public static int b; // 静态变量
public void m1() { // 实例方法
System.out.println("m1");
}
public static void m2() { // 静态方法
System.out.println("m2");
}
// STATIC内部类
public static class InnerClass {
public void accessMembers() {
System.out.println(b); // 可以访问静态变量
m2(); // 可以访问静态方法
}
}
public static void main(String[] args) {
InnerClass innerClass = new InnerClass();
innerClass.accessMembers();
}
}
输出结果:
m2
5
从输出结果中,我们可以看到STATIC内部类可以访问外部类的静态变量和静态方法,但不能访问外部类的实例变量和实例方法。
以上就是STATIC内部类的基本概念和用法。大家可以自己尝试编写一些代码来练习一下。