欢迎访问宙启技术站
智能推送

Java函数的内部类与静态内部类

发布时间:2023-06-18 00:15:22

Java中,内部类是嵌套在某个类中的类,用来实现更加细致和复杂的代码逻辑和结构。Java内部类分为两类:函数的内部类和静态内部类。这两类内部类的使用场景和特点都有所不同,下面我们将逐一介绍。

一、函数的内部类

函数类内部类也叫局部内部类,是定义在函数体内部的类,只能在定义所在的函数内部使用。函数的内部类可以访问外部类的成员变量和方法,但要求这些成员变量和方法必须被声明为final或是effectively final类型。

函数的内部类的一个主要应用场景是用来实现回调功能。回调模式是一种常用的异步编程思想,它将要执行的方法传递给另一个方法,并等待后者执行完后回调执行前者。

下面是一个简单的示例代码,演示了函数的内部类实现回调功能:

public class OuterClass {
    public void doSomething() {
        Callback callback = new Callback() { // 回调函数类
            @Override
            public void onSuccess() {
                System.out.println("onSuccess");
            }
        };
        doSomethingAsync(callback);
    }

    public void doSomethingAsync(Callback callback) {
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                callback.onSuccess();
            }
        }.start();
    }

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.doSomething();
    }

    interface Callback { // 回调函数接口
        void onSuccess();
    }
}

二、静态内部类

静态内部类是定义在类内部但是在类外部使用的类,与外部类解耦,不需要外部类的实例即可被创建。静态内部类可以访问外部类的静态成员变量和方法,但不能直接访问外部类的实例成员和方法。

静态内部类的主要应用场景是把一个类封装成一个单独的模块,与其他类进行解耦,以达到更好的模块化和代码复用性。

下面是一个静态内部类的示例代码:

public class OuterClass {
    private static String str = "outer class";

    public static class StaticInnerClass { // 静态内部类
        private static String str = "static inner class";

        public void print() {
            System.out.println(str);
            System.out.println(OuterClass.str);
        }
    }

    public static void main(String[] args) {
        StaticInnerClass staticInnerClass = new StaticInnerClass();
        staticInnerClass.print();
    }
}

以上代码中,我们定义了一个静态内部类StaticInnerClass,静态内部类实例化后可以访问外部类的静态成员变量str,同时也可以访问自身的静态成员变量str。最后在main函数中实例化了StaticInnerClass,并调用了它的print方法,输出了两个字符串。从输出结果可以看出,在静态内部类中访问静态成员变量时,需要加上它所在的类名,即OuterClass.str。

总结

Java内部类分为函数的内部类和静态内部类,它们的使用场景和特点也有所不同。函数的内部类主要用来实现回调功能,静态内部类主要用来封装一个单独的模块,与其他类进行解耦。无论是函数的内部类还是静态内部类,它们都是Java中非常重要的编程工具,可以大大提高Java程序的可维护性和复杂度。