局部变量和成员变量的区别
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