【Java】变量的分类(作用域,初始值,生命周期)

1. 变量的分类

变量根据在类中定义位置的不同,可以分为两大类:

成员变量:全局变量/字段(Field),不要称之为属性(错误),直接定义在类中,方法外面;
(1)类成员变量:使用static修饰符;
(2)实例成员变量:没有使用static修饰符;

局部变量:变量除了成员变量,其他都是局部变量;
(1)方法内部的变量;
(2)方法的形参;
(3)代码中的变量,一对{};

Class ABC{

	String info = null; //成员变量
	public void dowork(String name){
		System.out.println(name);
		int age; //局部变量

		if (true)
		{
			int num; // 局部变量
		}
	}
	
	{
		int age; // 局部变量
	}
}

2. 变量的初始值:

初始化才会在内存中开辟空间;

成员变量:默认是有初始值的(下图)
在这里插入图片描述
成员变量代码演示如下:

class Demo 
{
	static int i ;// i为成员变量,不初始化也能使用
	public static void main(String[] args) 
	{	
		System.out.println(i);
	}
}
---------- 运行java ----------
0

输出完成 (耗时 0) - 正常终止

局部变量:没有初始值,所以必须初始化才能使用;

class Demo 
{	
	public static void main(String[] args) 
	{		
		int i ;
		System.out.println(i);//编译报错,局部变量i没有被初始化
	}
}
---------- 编译java ----------
Demo.java:9: 错误: 可能尚未初始化变量i
		System.out.println(i);
		                   ^
1 个错误

输出完成 (耗时 0) - 正常终止

2. 变量的作用域:

变量根据定义位置的不同,也决定了各自的作用域是不同的,看变量所在的哪对{}

成员变量:在整个类中都有效;

局部变量:在开始定义的文职开始紧跟着结束的花括号为止;


成员变量可以先使用后定义,局部变量必须先定义而后才能使用
(1).首先解释,成员变量可以先使用后定义:
代码如下:

class Demo 
{
	
	public static void main(String[] args) 
	{	
		System.out.println(i);//先使用i
	}
	static int i ; //后定义i
}

编译通过,正常运行

---------- 运行java ----------
0

输出完成 (耗时 0) - 正常终止

(2) 局部变量必须先定义而后才能使用,代码如下:


class Demo 
{
	public static void main(String[] args) 
	{	
		System.out.println(i);	// 编译报错,找不到i
		int i ; 
	}
}

编译报错,局部变量必须向声明并初始化才能被使用;

---------- 编译java ----------
Demo.java:7: 错误: 找不到符号
		System.out.println(i);	
		                   ^
  符号:   变量 i
  位置: 类 Demo
1 个错误

输出完成 (耗时 0) - 正常终止

3. 变量的声明周期

变量的生命周期指的是变量存在的范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就被确定了;

变量的作用域决定了变量的生命周期,说明作用域不同,生命周期就不一样。

变量的生命周期指的是一个变量被创建并分配内存空间的开始,到该变量被销毁并清除其所占内存空间的过程。
在这里插入图片描述
局部变量定义后,必须显示初始化后才能使用,因为系统不会为局部变量执行初始化操作。这就意味着,定义局部变量后,系统并未这个变量分配内存空间。

直到程序为这个变量赋值时,系统才为局部变量分配内存,并将初始值保存到该内存中。

局部变量不属于任何类或实例,因为它总是保存在其所在的方法栈内存中。
基本数据类型局部变量:直接把这个变量值保存在该变量所对应的内存中。

引用数据局部变量:这个变量内存中存的是地址,通过该地址引用到该变量实际引用堆里的对象。

栈内存中的变量无需系统垃圾回收,其往往随方法或代码块的运行结束而结束。

什么时候使用成员变量和局部变量:
1.考虑变量的生存时间,这会影响内存开销;
2.扩大变量作用域,不利用提高程序的高内聚;

开发中需要注意:

1. 开发中应该尽量缩小变量的作用域范围,如此在内存中停留时间越短,性能也就越高。

2.不要动不动就是使用static修饰,定义工具方法的时候,static方法需要访问的变量,该变量属于类,此时才使用static修饰字段

3.r也不要动不动就使用成员变量,因此存在着线程不安全问题,能使用局部变量就尽量使用局部变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值