首页 > 编程笔记 > Java笔记 阅读:4

Java静态内部类的定义和使用(附带实例)

静态内部类是嵌套在另一个类中的类,并且使用关键字 static 进行修饰。

Java静态内部类的定义

静态内部类与外部类的关系相对独立,它可以访问外部类的静态成员,但不能直接访问外部类的非静态成员。静态内部类不依赖外部类的实例存在,这意味着可以在不创建外部类对象的情况下创建静态内部类对象。

【实例】创建类 ExtClassStaticDemo,实现对静态内部类的创建,代码如下:
public class ExtClassStaticDemo {
    private static int a = 10;
    private int b = 20;

    static class StaticInnerClassDemo {
        private int c = 30;

        public void testDemo() {
            // 访问外部类的静态成员
            System.out.println(a);
            // 不能直接访问外部类的非静态成员
            // System.out.println(b);
            // 可以直接访问静态内部类的非静态成员
            System.out.println(c);
        }
    }
}
在上述代码中,StaticInnerClassDemo 是 ExtClassStaticDemo 的静态内部类,在静态内部类中可以直接访问外部类的静态成员,但不能访问外部类的非静态成员;在静态内部类中可以访问静态成员或非静态成员。

Java静态内部类的使用

可以通过“外部类名.内部类名”的方式创建静态内部类对象,无须先创建外部类对象。

静态内部类可以包含静态和非静态成员,包括方法、变量和其他内部类。

【实例】创建类 ExtClassStaticDemo,实现对静态内部类的使用,代码如下:
public class ExtClassStaticDemo {
    private static int a = 10;
    private int b = 20;

    static class StaticInnerClassDemo {
        private int c = 30;

        public void testDemo() {
            // 访问外部类的静态成员
            System.out.println(a);
            // 不能直接访问外部类的非静态成员
            // System.out.println(b);
            // 可以直接访问静态内部类的非静态成员
            System.out.println(c);
        }
    }
}

public class ExtClassStaticDemoTest {
    public static void main(String[] args) {
        ExtClassStaticDemo.StaticInnerClassDemo staticInnerClassDemo =
            new ExtClassStaticDemo.StaticInnerClassDemo();
        staticInnerClassDemo.testDemo();
    }
}
程序运行结果如下:

10
30

在上述代码中,静态内部类 StaticInnerClassDemo 可以直接访问本类中的非静态成员和静态成员,可以直接使用“外部类名.内部类名”的方式创建对象。

静态内部类在一些情况下非常有用。例如,当一个内部类不需要访问外部类的非静态成员,并且希望独立于外部类的实例存在时,就可以使用静态内部类来更好地实现封装和代码组织。

相关文章