局部变量和成员变量的区别
1. 声明的位置
1.1局部变量:方法体中、形参、代码块中
1.2成员变量:类中方法外
1.2.1类变量:有static修饰
1.2.2实例变量:没有static修饰
2. 修饰符
2.1局部变量:final修饰
2.2成员变量:public、protected、private....
3. 值存储的位置
3.1局部变量:栈
3.2实例变量:堆
3.3类变量:方法区
4. 作用域
4.1局部变量:从声明处开始,到所属的}结束
4.2实例变量:在当前类中“this.”访问(有时可以省略),在其他类中“对象名.”访问
4.3类变量:在当前类中“类名.”访问(有时可以省略),在其他类中“类名.”访问
5. 生命周期
5.1局部变量:每个线程,都次调用执行都是新的生命周期
5.2实例变量:随着对象的创建而初始化,随着对象被回收而消亡,每个对象的实例变量都是独有的
5.3类变量:随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量都是共享的
局部变量与XX变量重名时,如何区分?
1. 局部变量与实例变量重名
1.1在实例变量前加this.
2. 局部变量与类变量重名
2.1在类变量前加类名.
Java虚拟机内存图
Java虚拟机各个数据区详细说明
1. 堆:此内存区域唯一的目的是存放对象实例。
2. 栈:也叫虚拟机栈,用于存储局部变量表等。局部变量表存放了可知长度的各种基本类型、引用类型,方法执行完,自动释放
3. 方法区:用于存储被虚拟机加载的类信息、常量、静态变量,即被编译器编译过后的代码数据s