1.java全局变量
1.1 概述
Java中的全局变量通常是指定义在类级别上的变量,也称为类变量或静态变量。它们与对象实例无关,而是与类相关联的变量。这意味着无论创建多少个对象,类变量的值都是相同的。类变量可以在整个类中使用,并且可以通过类名直接访问。
要定义一个类变量,需要在变量声明之前添加关键字“static”。例如:
public class MyClass {
static int globalVariable = 10;
}
在上面的示例中,globalVariable是一个类变量,它被定义为一个整数,并初始化为10。该变量可以通过类名访问,如下所示:
MyClass.globalVariable = 20;
类变量可以在类中的任何地方使用,并且对于所有对象都是相同的。这使得它们成为在整个类中共享数据的有用工具。
1.2 特点
Java的全局变量,也称为成员变量或类变量,是在类中定义的变量,可以被类的所有方法和对象访问。以下是Java全局变量的特点:
1.生命周期:全局变量在类定义的生命周期内存在,即在对象创建前就已经存在,直到程序结束或类被卸载时才被销毁。
2.默认值:如果没有给全局变量赋初值,则它们将默认初始化为0或null,具体取决于变量的类型。
3.可见性:全局变量可以在类的所有方法中访问,包括静态和非静态方法。
4.作用域:全局变量的作用域是整个类,可以在类的任何方法中使用。
5.静态性:可以使用static关键字将全局变量声明为静态变量,这样它们将成为类变量,而不是对象变量。静态变量只有一个副本,被类的所有对象所共享,因此它们可以在不创建对象的情况下访问。
6.可变性:全局变量可以是可变的或不可变的,这取决于它们的数据类型。如果全局变量是一个对象,则可以更改该对象的状态,即使变量本身是final类型。
总之,全局变量是Java中非常重要的一种数据类型,它们可以让变量在类的范围内存在,并且可以在整个类中使用。因此,它们可以被用来存储对整个类有意义的数据,或者作为类的状态的标志。
1.3 案例
以下是一个使用全局变量的Java示例:
public static void main(String[] args) {
// 在 main 方法中访问全局变量
System.out.println("全局变量的值为: " + globalVariable);
// 调用方法来修改全局变量的值
modifyGlobalVariable();
// 再次访问全局变量来查看其值是否被修改
System.out.println("修改后的全局变量的值为: " + globalVariable);
}
public static void modifyGlobalVariable() {
// 在方法中修改全局变量的值
globalVariable = 20;
}
在这个例子中,我们声明了一个名为 globalVariable 的静态全局变量,它的值为 10。我们然后在 main 方法中访问这个全局变量,并将其值打印出来。
接下来,我们调用 modifyGlobalVariable 方法来修改全局变量的值。在这个方法中,我们将 globalVariable 的值改为 20。
最后,我们再次访问 globalVariable 来检查它的值是否已被修改,并将其值打印出来。
注意,在 Java 中,静态全局变量必须使用 static 关键字进行声明,以便在其他静态方法中访问它。
1.4 java全局变量的存储区域
●Java中的全局变量(即静态变量)存储在Java虚拟机(JVM)的方法区中。方法区是一种在JVM中用于存储类信息、常量、静态变量等数据的内存区域。在JVM启动时,方法区被分配,其大小可以根据需要进行调整。
●由于方法区是在JVM中共享的,因此所有实例都可以访问相同的全局变量。因此,全局变量也称为类变量,因为它们与整个类相关联,而不是与任何特定实例相关联。全局变量在类被加载时初始化,并且可以通过类名来访问,而不需要创建类的实例。
2.局部变量
2.1 概述
局部变量是在定义形参、方法或代码块内部的变量,该变量只在当前方法、代码块中有效。
2.2特点
局部变量具有如下特点:
●局部变量声明在方法、构造方法或者代码块、形参中;
●局部变量在方法、构造方法、或者语句块被执行时创建,当它们执行完成后,局部变量就会被销毁;
●访问修饰符不能添加在局部变量上;
●局部变量只在声明它的方法、构造方法或者代码块、形参中可见;
●局部变量是在栈上分配的;
●局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
2.3 案例
在下面的案例中,给大家定义了几个局部变量供大家参考。
//args也是一种局部变量,在main(){}方法的{}范围内有效
public static void main(String[] args) {
int a = 10;//局部变量,在main(){}方法的{}范围内有效
System.out.println("a=" + a);
}
public void showAge() {
//i也是一种局部变量,只在for(){}这对{}范围内
for(int i=0;i<100;i++) {
System.out.println("age=" + age);
}
}
2.4 java局部变量的存储区域
●Java 中的局部变量存储在栈(stack)内存中。栈是一种后进先出的数据结构,用于存储方法调用时的局部变量、方法参数和返回值等数据。当一个方法被调用时,会为该方法在栈上分配一块内存空间,用于存储该方法的局部变量和方法参数。当方法执行完毕后,该方法的栈帧就会被销毁,该方法的局部变量和方法参数也就随之被释放。因此,局部变量的生命周期与方法的生命周期相同,只在方法内部有效。
3.总结
至此,最后给大家总结下局部变量和成员变量的区别,大家一定多上手练一练哈,这样才能加深印象:
相同点:
1.定义变量的格式相同;
2.先声明后使用;
3.变量都有对应的作用域。
不同点:
两者声明的位置及作用范围不同,如下表所示:
成员变量 直接定义在类中,根据修饰符的不同,可以在当前类或其他类中有效。
局部变量 定义在方法的形参、方法内部、代码块内部的变量。只在当前方法及代码块内部有效。