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

Java函数的变量作用域:局部变量和全局变量的区别

发布时间:2023-05-21 07:42:02

在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编程实践的一部分。