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