Java的变量主要分为三种:
1.成员变量
2.局部变量
3.静态变量
首先我们知道,Java所有的变量都必须定义在类中,成员变量也不例外,但是成员变量和局部变量不同和静态变量相同的地方就是成员变量要在方法外面定义,并且它的作用域是整个类,这个类中的任何一个非静态方法都可以调用。它的生命周期和所在对象的生命周期一样,当然如果这个成员变量本身是一个引用类型的,这个对象又在其他的类中被引用他并不会被GC回收,这种情况下就要等这个对象的引用计数器为零或者从根出发找不到这个对象,Java虚拟机就会判断没有其他引用引用这个变量了,下次GC运行将它回收掉。 局部变量,顾名思义,局部变量就是只在一个局部的范围内使用的变量,那么这个局部指什么,是指在方法中,可以通过参数传递进来,也可以在方法内定义,它的作用域就是定义它的时候所在的{},如:
public int text(int number){
int number2 = number;
for (int count = 0; count < 10; count++) {
number2 += number;
}
return number2;
}
这里number就是由外界传递进来的一个局部变量,number2也是一个局部变量,for循环里的count也是一个局部变量,但是这三个局部变量的作用域却并不相同,number和number2的作用域都是整个text方法,而count的作用域只有属于for循环的{}。局部变量的生命期,如果是基本数据类型那么当程序执行不在局部变量的作用域内的时候,下次GC运行就会将局部变量回收,如果局部变量是引用类型那么在超出作用域的时候该对象的引用计数就会-1,当没有引用指向该对象的时候,下次GC运行也会将其收回。
静态变量(static),静态变量和C语言中的全局变量基本类似,我们也称呼这种变量为类变量,他是所有该类的对象所共享的,static变量不需要实例化对象就可以用类名直接调用。它的作用域和全局变量基本相同。时间周期则是类加载时在方法区分配一块内存,当类被卸载的时候会被回收。