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

Java中函数的作用域和访问级别

发布时间:2023-06-19 23:05:47

Java中函数的作用域和访问级别

在Java语言中,函数有不同的作用域和访问级别,函数的作用域和访问级别直接决定了该函数能够被哪些代码访问。

1. 函数的作用域

Java中,函数的作用域分为全局范围和局部范围两种。全局范围的函数可以被整个类中的代码所访问,而局部范围的函数只能在函数所定义的代码块中访问。

(1)全局范围的函数

全局范围的函数是指类级别的函数,这种函数被定义在类的内部,可以被类中的任意代码所访问,类中的所有函数和变量都处于全局范围。

例如,下面的代码演示了一个名为MyClass的类,包含了两个函数:add()和sub(),这两个函数都处于类的全局范围内,可以被其他代码所访问:

public class MyClass {

    public int add(int a, int b) {
        return a + b;
    }

    public int sub(int a, int b) {
        return a - b;
    }
}

(2)局部范围的函数

局部范围的函数是指在某个代码块内部被定义的函数,例如在另一个函数内部定义的函数。这种函数只能在所在代码块内部被访问,超出该代码块的范围后就无法访问。

例如,下面的代码演示了一个名为MyClass的类,包含了一个名为doMath()的函数,doMath()函数在全局范围内被定义,但是在其中定义了一个名为inner()的函数,在inner()函数内部执行的代码不能被doMath()函数以外的代码所访问:

public class MyClass {

    public void doMath(int x, int y) {

        int inner(int a, int b) {
            return a * b;
        }

        int result = inner(x, y);
        System.out.println("The result is: " + result);
    }
}

2. 函数的访问级别

Java中,函数有不同的访问级别,分别是public、protected、default和private。访问级别决定了哪些代码可以访问该函数。

(1)public

public是 别的访问级别,表示该函数可以被任何代码所访问,无论该代码是否属于这个类。

例如,下面的代码演示了一个名为MyClass的类,其中定义了一个名为add()的函数,add()函数的访问级别是public,因此在该类的外部代码中也可以直接访问该函数:

public class MyClass {

    public int add(int a, int b) {
        return a + b;
    }
}

public class Main {

    public static void main(String[] args) {

        MyClass myClass = new MyClass();
        int result = myClass.add(2, 3);
        System.out.println("The result is: " + result);
    }
}

(2)protected

protected表示该函数可以被其子类所访问。在Java中,类可以派生出子类,子类继承了父类的所有成员,包括函数和变量。如果函数的访问级别是protected,那么只有该类的子类才能访问该函数。

例如,下面的代码演示了一个名为MyClass的类,其中定义了一个名为add()的函数,add()函数的访问级别是protected,因此只有它的子类才能访问该函数:

public class MyClass {

    protected int add(int a, int b) {
        return a + b;
    }
}

public class MySubClass extends MyClass {

    public void printResult() {
        int result = add(2, 3);
        System.out.println("The result is: " + result);
    }
}

public class Main {

    public static void main(String[] args) {

        MySubClass mySubClass = new MySubClass();
        mySubClass.printResult();
    }
}

(3)default

default表示该函数的访问级别是包级别。在Java中,如果没有为函数显式指定访问级别,那么该函数就是包级别的,只能被同一包内的代码所访问。包是一组相关功能的代码的集合,可以用package关键字来定义。

例如,下面的代码演示了一个名为MyPackage的包,其中包含了一个名为MyClass的类,MyClass类中定义了一个名为add()的函数,add()函数的访问级别是默认的包级别,因此只有同一包中的代码才能访问该函数:

package MyPackage;

public class MyClass {

    int add(int a, int b) {
        return a + b;
    }
}

package MyPackage;

public class Main {

    public static void main(String[] args) {

        MyClass myClass = new MyClass();
        int result = myClass.add(2, 3);
        System.out.println("The result is: " + result);
    }
}

(4)private

private表示该函数的访问级别是私有的,只能被该类内部的代码所访问。在Java中,如果函数的访问级别是private,那么外部的代码就无法访问该函数,即使是该类的子类也一样。

例如,下面的代码演示了一个名为MyClass的类,其中定义了一个名为add()的函数,add()函数的访问级别是private,因此只有该类内部的代码才能访问该函数:

public class MyClass {

    private int add(int a, int b) {
        return a + b;
    }

    public void printResult() {
        int result = add(2, 3);
        System.out.println("The result is: " + result);
    }
}

public class Main {

    public static void main(String[] args) {

        MyClass myClass = new MyClass();
        myClass.printResult();
    }
}

总结

在Java中,函数的作用域和访问级别是非常重要的概念,通过合理的定义函数的作用域和访问级别,可以控制代码的访问范围,提高代码的安全性,也能更好的将代码进行模块化、封装。