全局变量和局部变量初始化及默认值探究

本文深入探讨了Java中全局变量与局部变量的区别、作用域、初始化规则及实例应用,详细解析Java类中成员变量的初始化过程,帮助开发者更好地理解和运用Java变量管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class VariableTest {
	class Person {
		private String familyName;
		private String lastName = "33";
		private int age;
		private Integer gender;

		public String getFamilyName() {
			return familyName;
		}

		public void setFamilyName(String familyName) {
			this.familyName = familyName;
		}

		public String getLastName() {
			return lastName;
		}

		public void setLastName(String lastName) {
			this.lastName = lastName;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}

		public Integer getGender() {
			return gender;
		}

		public void setGender(Integer gender) {
			this.gender = gender;
		}

		@Override
		public String toString() {
			return "Person [familyName=" + familyName + ", lastName=" + lastName + ", age=" + age + ", gender=" + gender
					+ "]";
		}
	}

	@Test
	public void propertyInitTest() {
		// private String familyName;
		// private String lastName = "";
		// private int age;
		// private Integer gender;
		Person person = new Person();
		System.out.println(person);// Person [familyName=null, lastName=, age=0,
									// gender=null]
		String lastName = person.getLastName();
		if ("".equals(lastName)) {
			System.out.println("string类型全局变量初始化值");
		}
		String dd;
		// System.out.println(dd);
	}
}

首先应该了解的是,在类中声明的变量叫做全局变量(global variable),在方法中声明的变量叫做局部变量(local variable)。

        全局变量在声明时可以赋值也可以不赋值。如果赋值的话,第一次使用时使用的是所赋的值;如果不赋值的话,则第一次使用时使用的是全局变量的默认值:引用类型(String,Integer,Boolean等包装类型)的变量默认值都是null,基本类型的变量默认值则不一样,int型变量默认值是0,boolean型变量默认值是false

       局部变量在声明时也是可以赋值或者不赋值,但是在使用之前一定要赋值,否则在使用的时候会报编译错误的,说 The local variable dd may not have been initialized。

       总结来说,全局变量在使用前不必赋值,没赋值的话用默认值,然而局部变量在使用前必须赋值。

### C语言中全局变量静态局部变量的默认初始化规则 在C语言中,全局变量静态局部变量都具有特定的默认初始化规则。以下是详细的说明: #### 全局变量的默认初始化规则 全局变量是指定义在所有函数外部的变量,其作用范围是从定义的位置一直到源文件的结尾[^4]。如果未显式地给全局变量赋初始值,则编译器会自动将其初始化为零(对于数值型数据),或者为空指针(对于指针类型)。这种行为是因为全局变量存储在内存的静态存储区域,在程序启动前由操作系统负责清零。 例如: ```c int globalVar; // 自动初始化为 0 char globalChar; // 自动初始化为 '\0' float globalFloat; // 自动初始化为 0.0f ``` 以上代码中的 `globalVar`、`globalChar` `globalFloat` 均会被初始化为其类型的默认值[^1]。 --- #### 静态局部变量的默认初始化规则 静态局部变量是在函数内部通过 `static` 关键字声明的变量。它与普通局部变量的主要区别在于生命周期的不同——静态局部变量在整个程序运行期间始终存在,而普通局部变量仅存在于函数调用期间[^2]。 当静态局部变量未被显式初始化时,也会像全局变量一样,默认被初始化为零或等价于零的值。这是因为静态局部变量同样位于内存的静态存储区,而非栈上。 例如: ```c void exampleFunction() { static int staticLocalVar; // 默认初始化为 0 } ``` 上述代码中,`staticLocalVar` 的值会在首次进入 `exampleFunction()` 函数时被设置为 0,并且后续每次调用此函数时保持上次退出时的状态不变[^3]。 --- ### 总结对比 | 变量类型 | 存储位置 | 生命周期 | 初始化规则 | |------------------|---------------|-------------------------------|---------------------------------------------------------------------------| | **全局变量** | 静态存储区 | 整个程序运行期 | 若无显式初始化,则默认为对应类型的零值 (如整数为 0, 浮点数为 0.0) | | **静态局部变量** | 静态存储区 | 整个程序运行期 | 同样遵循零值初始化规则;若已初始化,则只发生一次 | 需要注意的是,无论是全局变量还是静态局部变量,只要它们处于静态存储区内存空间,都会受到相同的初始化机制约束[^4]。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值