Java-深入变量
定义变量的语法:
数据类型 变量名 = 值;
--------------------------------------------------
变量根据在类中定义位置的不同,分成两大类:
成员变量: 全局变量/字段(Field),不要称之为属性(错误). 直接定义在类中,方法外面.
1):类成员变量. 使用static修饰的字段.
2):实例成员变量. 没有使用static修饰的字段.
局部变量: 变量除了成员变量,其他都是局部变量.
1): 方法内部的变量.
2):方法的形参.
3):代码块中的变量,一对{}.
--------------------------------------------------------
变量的初始值:初始化才会在内存中开辟空间.
成员变量: 默认是有初始值的(看图)
局部变量: 没有初始值,所以必须先初始化才能使用.
--------------------------------------------------------
变量的作用域:
变量根据定义的位置不同,也决定了各自的作用域是不同的. 看变量所在的那对{}.
成员变量: 在整个类中都有效.
局部变量: 在开始定义的位置开始,到紧跟着结束的花括号为止.
--------------------------------------------------------
成员变量,可以先使用后定义,局部变量必须先定义而后才能使用.
class ABC { String info = null;//成员变量 void doWork(String name) { System.out.println(x); int age;//局部变量 if(true) { int num;//局部变量 } } { int num;//局部变量 } String x ; }
变量的生命周期:
变量的作用域指的是变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了:
变量的作用域决定了变量的生命周期,说明作用域不同,生命周期就不一样。
变量的生命周期指的是一个变量被创建并分配内存空间开始,到该变量被销毁并清除其所占内存空间的过程。
局部变量定义后,必须显示初始化后才能使用,因为系统不会为局部变量执行初始化操作。这就意味着,定义局部变量后,系统并未为这个变量分配内存空间。
直到程序为这个变量赋值时,系统才会为局部变量分配内存,并将初始值保存到该内存中。
局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。
基本数据局部变量:直接把这个变量的值保存到该变量所对应的内存中。
引用数据局部变量:这个变量内存中存的是地址,通过该地址引用到该变量实际引用堆里的的对象。
栈内存中的变量无需系统垃圾回收,其往往随方法或代码块的运行结束而结束。
什么时候使用成员变量和局部变量:
1:考虑变量的生存时间,这会影响内存开销。
2:扩大变量作用域,不利于提高程序的高内聚。
开发中应该尽量缩小变量的作用范围,如此在内存中停留时间越短,性能也就更高。
不要动不动就使用static修饰,一般,定义工具方法的时候,static方法需要访问的变量,该变量属于类,此时才使用static修饰字段.
也不要动不动就使用成员变量,因为存在着线程不安全问题,能使用局部变量尽量使用局部变量.
共有 0 条评论