Java函数的变量作用域:局部变量和全局变量的区别
在Java编程语言中,变量的作用范围被称为变量的作用域。Java变量的作用域可以分为局部变量和全局变量两类。在此之前,我们需要先了解一下 Java 分类变量的概念。
Java 变量的分类:
在 Java 编程语言中一共有5种引用类型:
①类(Class)
②接口(Interface)
③数组(Array)
④枚举(Enumeration)
⑤注解(Annotation)
而变量 可以分为 实例变量、 类变量、 局部变量 和 形式参数。
实例变量:在类中直接定义,属于对象级别的。实例变量不赋值时默认为0或者 null。
类变量:即静态变量,这种变量是定义在类中用 static 修饰的变量。
局部变量:在方法或代码块内部定义的变量。局部变量只在定义它的函数或代码块内可见。
形式参数:这种变量是在方法签名中定义,即只在方法其内部范围有效
在下面的讨论中,我们将仅关注 Java 变量中的局部变量和全局变量。
Java 局部变量的作用域
局部变量是在方法或代码块内部定义的变量,只在定义它的方法或代码块内可见。 在该方法或代码块之外,这个变量是不可见的。
在 Java 程序中,局部变量的作用域从它的声明点开始,到定义该变量的块结束为止。如果一个方法中有多个代码块或局部变量,那么它们之间是相互独立的。 即,在一个代码块或函数的局部变量中声明的变量,在该代码块之外是无法访问的。
下面是局部变量的一个示例:
public class LocalVariableExample {
public void myMethod() {
int num = 10; // 局部变量num在myMethod 方法中被声明。
System.out.println("num is: " + num); // 打印num值。
num++;
System.out.println("num after increment is: " + num);
}
public static void main(String[] args) {
LocalVariableExample obj = new LocalVariableExample();
obj.myMethod();
}
}
在本例中,我们已经声明了一个整数类型的局部变量 num,它只在 myMethod 方法的内部有效。 num 的值被打印出来,并在后来增加了1。 但是,我们无法在该方法之外访问 num 变量,因为 num 是一个局部变量。
Java 全局变量的作用域
全局变量是在整个程序中都有效的变量,也称为类变量或静态变量。 可以在类的任何方法中使用全局变量,包括构造方法和其他方法。
下面是全局变量的一个示例:
public class GlobalVariableExample {
static int num = 10; // 全局变量num在类的任何方法都可以使用。
public static void main(String[] args) {
System.out.println("num is: " + num); // 打印num值。
num++;
System.out.println("num after increment is: " + num);
}
}
在本例中,num 定义在类示例外,是一个全局变量,可以在整个类中的任何方法中使用。在 this 对象中定义全局变量与无对象变量在内存中的位置不同。所有无对象变量均保存在堆或栈中,以便在创建变量时生成动态存储。所以无对象变量是非固定的。而对于全局变量,它们是不经常变动的,并且每个类可以读取值,所以整个类只需要在内存中保存一个实例。
局部变量和全局变量的区别
有些人会将局部变量与全局变量混淆,但实际上它们有几个非常重要的区别。
1.范围不同:
局部变量的作用域在声明变量的代码块之内,而全局变量在整个程序中都可以被访问。
2.生命周期不同:
局部变量和全局变量具有不同的生命周期。局部变量只在所属代码块内或方法内可见,而全局变量在整个程序运行期间都存在。
3.访问控制不同:
全局变量的访问受到其本身的访问修饰符的限制。不同的类和不同包中的代码可以访问同一变量,前提是该变量被声明为public或者protected。而局部变量只能在其所属的块中访问。
4. 内存存储空间不同:
局部变量存储在栈内存中,这是一个在函数调用时分配和释放存储空间的线程级别。当函数返回时,变量的空间被释放。全局变量存储在堆内存中,占用更长时间的空间。
总结
Java 变量的作用域包括局部和全局。局部变量的作用域在定义它的代码块之内,全局变量在整个程序中存在。在选择变量的类型时,必须考虑变量所需的最终访问范围,以防止代码的错误消息或混乱。因此,了解局部变量和全局变量之间的区别是更佳Java编程实践的一部分。
