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

了解Java函数的作用域和访问权限

发布时间:2023-06-25 15:18:37

Java 是一种面向对象编程语言,支持封装、继承和多态等特性。在 Java 中,函数是一种常用的代码组织方式,通过定义函数来实现代码的复用和模块化。在函数的定义过程中,需要注意作用域和访问权限的概念,它们决定了函数可以被访问的范围和方式。

一、作用域 

作用域是指变量、常量和函数的可见范围,即它们能够被访问的区域。在 Java 中,作用域分为全局作用域和局部作用域两种。

1.全局作用域 

全局作用域指在整个程序中都可以访问到的变量、常量和函数。在 Java 中,可以通过两种方式来实现全局作用域:

1)在类中定义静态变量、常量和静态函数。这些变量、常量和函数可以在整个类中使用,无需实例化对象即可访问。

2)在类外部单独定义变量、常量和函数,并使用 public 修饰符将其声明为全局变量、常量和函数。这些变量、常量和函数可以被整个程序访问,不受所在类的限制。

例如,下面是一个简单的 Java 程序,其中定义了一个类 MyMath 和一个全局函数 sum:

class MyMath {

    public static final double PI = 3.1415926535; //定义全局常量 PI

    public static int sum(int a, int b) { //定义全局函数 sum

        return a + b;

    }

}

public class Main {

    public static void main(String[] args) {

        int a = 10;

        int b = 20;

        System.out.println(MyMath.PI); //输出全局常量 PI

        System.out.println(MyMath.sum(a, b)); //调用全局函数 sum

    }

}

2.局部作用域 

局部作用域指在函数内部可以访问到的变量和常量。在 Java 中,可以在函数体内部定义局部变量和常量,并且只能在该函数体内部访问。

例如,下面是一个简单的 Java 程序,其中定义了一个函数 max,用于比较两个整数的大小,并返回较大值:

public class Main {

    public static int max(int a, int b) { //定义局部函数 max

        int result = (a > b) ? a : b; //定义局部变量 result

        return result;

    }

    public static void main(String[] args) {

        int a = 10;

        int b = 20;

        System.out.println(max(a, b)); //调用局部函数 max

    }

}

二、访问权限 

访问权限是指变量、常量和函数被其他对象访问的权限级别。在 Java 中,访问权限分为四种:public、protected、default(也称为 package-private)、private。

1.public 

public 是最高权限,表示所有对象都可以访问该变量、常量和函数。如果将一个变量、常量或函数声明为 public,则该变量、常量或函数可以被同一程序中的所有对象访问。

例如,下面是一个简单的 Java 程序,其中定义了一个公共类 MyMath 和一个公共函数 sum:

public class MyMath {

    public static int sum(int a, int b) { //定义全局函数 sum,并使用 public 修饰符

        return a + b;

    }

}

public class Main {

    public static void main(String[] args) {

        int a = 10;

        int b = 20;

        System.out.println(MyMath.sum(a, b)); //调用公共函数 sum

    }

}

2.protected 

protected 表示变量、常量和函数只能被同一包或子类的对象访问。如果将一个变量、常量或函数声明为 protected,则该变量、常量或函数可以被同一包或子类的对象访问,但不能被其他对象访问。

例如,下面是一个简单的 Java 程序,其中定义了一个公共类 MyBase 和一个受保护的函数 getMax:

public class MyBase {

    protected static int getMax(int[] arr) { //定义受保护的函数 getMax,并使用 protected 修饰符

        int max = arr[0];

        for (int i = 1; i < arr.length; i++) {

            if (arr[i] > max) {

                max = arr[i];

            }

        }

        return max;

    }

}

public class MySub extends MyBase { //定义一个子类 MySub,这个子类可以访问 MyBase 中的受保护函数 getMax

    public static void main(String[] args) {

        int[] arr = {5, 3, 6, 1, 4};

        System.out.println(getMax(arr)); //调用受保护函数 getMax

    }

}

3.default 

default 或 package-private 表示变量、常量和函数只能被同一包中的对象访问。如果将一个变量、常量或函数没有任何修饰符,则默认为 default 权限,即同一包中的对象可以访问,但其他包中的对象不能访问。

例如,下面是一个简单的 Java 程序,其中定义了一个公共类 MyMath 和一个默认函数 square,函数 square 没有任何修饰符,即默认为 default 权限:

public class MyMath {

    static int square(int a) { //定义默认函数 square

        return a * a;

    }

}

public class Main {

    public static void main(String[] args) {

        System.out.println(MyMath.square(5)); //调用默认函数 square

    }

}

4.private 

private 是最低权限,表示变量、常量和函数只能被该类中的方法访问,不能被其他类访问。如果将一个变量、常量或函数声明为 private,则该变量、常量或函数只能被该类中的方法访问,不能被其他类访问。

例如,下面是一个简单的 Java 程序,其中定义了一个类 MyClass 和一个私有函数 getSum:

public class MyClass {

    private static int getSum(int a, int b) { //定义私有函数 getSum

        return a + b;

    }

    public static void main(String[] args) {

        int a = 10;

        int b = 20;

        System.out.println(getSum(a, b)); //编译错误,私有函数 getSum 不能被 main 方法访问

    }

}

三、总结 

作用域和访问权限都是 Java 中非常重要的概念,掌握它们可以让我们更好地使用 Java 函数,并保证程序的稳定性和可维护性。在实际开发中,需要遵循良好的编程习惯,正确使用作用域和访问权限,以保证程序代码可读性和可重用性。