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

Java中的内部函数及其与外部变量交互的方法

发布时间:2023-06-04 05:20:02

在 Java 中,内部函数也被称为内部类或嵌套类,它们允许在类或方法的内部定义另一个类或接口。内部函数可以直接访问外部函数中定义的变量和方法,进而实现对外部变量的交互。

Java 中的内部函数分为四种:静态内部类、成员内部类、局部内部类和匿名内部类。这四种内部类都可以访问外部类的成员变量和方法,但它们的访问方式略有不同。

1. 静态内部类

静态内部类属于外部类,并使用 static 关键字进行修饰。它与外部类的对象无关,所以不能直接访问非静态成员变量或方法。但是,它可以访问外部类的静态成员变量和方法。静态内部类的访问方式为外部类名.内部类名。示例如下:

public class OuterClass {

    static int x = 10;

    static class InnerClass {

        void display() {

            System.out.println("x = " + x);

        }

    }

    public static void main(String[] args) {

        OuterClass.InnerClass innerObject = new OuterClass.InnerClass(); 

        innerObject.display();

    }

}

2. 成员内部类

成员内部类属于外部类的一个成员,它没有使用 static 关键字进行修饰。成员内部类可以访问外部类的所有成员变量和方法,包括私有成员。成员内部类必须先创建外部类对象,并通过外部类对象来创建内部类对象。成员内部类的访问方式为 外部类对象.内部类对象。示例如下:

public class OuterClass {

    int x = 10;

    class InnerClass {

        void display() {

            System.out.println("x = " + x);

        }

    }

    public static void main(String[] args) {

        OuterClass outerObject = new OuterClass();

        OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

        innerObject.display();

    }

}

3. 局部内部类

局部内部类也称为方法内部类,它属于外部类方法中的一个局部变量。局部内部类不能使用访问控制符或 static 修饰符进行修饰,其作用域仅在定义该类的方法中。局部内部类可以访问外部类的所有成员变量和方法,但是访问外部类方法内的局部变量时必须将该变量声明为 final。局部内部类的访问方式为 方法名.内部类名。示例如下:

public class OuterClass {

    void outerMethod() {

        int y = 20;

        class InnerClass {

            void display() {

                System.out.println("y = " + y);

            }

        }

        InnerClass innerObject = new InnerClass(); 

        innerObject.display();

    }

    public static void main(String[] args) {

        OuterClass outerObject = new OuterClass();

        outerObject.outerMethod();

    }

}

4. 匿名内部类

匿名内部类没有类名,它通常用于实现(继承)某个接口或者类的对象。匿名内部类可以访问外部类的所有成员变量和方法,但是它不能访问该类的非 final 局部变量。匿名内部类的语法格式为:new 类或接口名() { 成员变量和方法的定义 }。示例如下:

public class OuterClass {

    void outerMethod() {

        new Thread(new Runnable(){

            public void run() {

                System.out.println("Thread is running...");

            }

        }).start();

    }

    public static void main(String[] args) {

        OuterClass outerObject = new OuterClass();

        outerObject.outerMethod();

    }

}

总的来说,Java 中的内部函数可以方便地访问外部变量和方法,并且更好地实现程序的模块化和封装。不同类型的内部函数有不同的访问方式,我们需要根据实际需求进行选择。