java三大变量分别是:类变量(静态变量)、实例变量和局部变量(本地变量)。
1、作用域不同
全局变量:作用整个类中,直接被类调用。
成员变量:作用在整个类中(除静态方法不能使用,静态方法没有隐式的this),被对象调用。
局部变量:作用在一个局部区域,比如说在一个方法中,方法调用。
局部变量作用在它被创建的方法里,从方法的一个花括号{方法体}到结尾的一个花括号里就是它的作用域
当成员变量和局部变量重名时,采取就近原则
2、在JVM内存中不同
成员变量,有默认值;
局部变量,没有默认值;
所以在定义成员变量时可以不赋初始值,而定义局部变量则需要赋初始值
全局变量(全局静态变量)是放在方法区中。
成员变量如果没有实例化那么变量是放在栈中;实例化了对象放在堆中,栈中放的是指向堆中对象的引用地址。
局部变量放在栈中,new的对象放在堆中,8中基本数据类型变量放在栈中,变量所对应的值是放在栈帧中。
3、生命周期不同
成员变量是存在于堆区中的,它随着它所作用的对象创建而被创建,但对象被垃圾回收机制GC销毁对象时,成员变量被销毁
局部变量是存在栈区中的,它相当是引用,它随着它所作用的方法被调用而创建,随着该对象被调用结束而被销毁