1.高频面试题
运算结果
考点:
1.变量的就近原则【注意:作用域的问题】
2.变量的分类
成员变量:类变量、实例变量
局部变量
非静态代码块的执行:每次创建实例对象都会执行
方法的调用规则:调用有一次执行一次
局部变量和成员变量的区别:
1.声明的位置
局部变量
1)方法体{}中
2)形参
3)代码块{}中
成员变量:类中方法外
类变量:有static修饰
实例变量:没有static修饰
修饰符:
局部变量 final
成员变量 public protected private final static volatile transient
值存储的位置:
局部变量:堆
实例变量:堆
类变量:方法区
作用域:
局部变量:从声明开始到所属的}结束
实例变量:在当前类中 this. (有时this. 可以缺省), 在其他类中“对象名”.访问
类变量:在当前类中“类名.” 有时(类名. 可以省略) ,在其他类中类名. 或者对象名.访问
生命周期:
局部变量:每一个线程,每一个调用执行都是新的生命周期
实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象实例变量是对立的
类变量:随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的
static 方法不能直接访问非成员变量,但是可以通过对象.的形式进行访问
2.JVM虚拟机内存:
虚拟机各部分解析:
3.成员变量是有默认值的
4.实例化其实执行的是:<init>方法,非静态代码块也是栈帧
5.内存模型分析
当局部变量与XX变量重名时,如果进行区分:
1.局部变量与实例变量重名
在实例成员变量前加 this.
2.局部变量与类变量重名
在类变量前面加 类名.