答案
2 1 5
1 1 5
变量分为局部变量和成员变量, 成员变量又分为实例变量和静态变量
1 变量的就近原则,同一作用域内,如果参数便可和类的属性名(实例变量)重名了,除非通过变量是被this.xx来显示声明这个xx是实例变量,其余情况这个变量代表的是参数变量而不是实例变量,
2 可以根据位置来进行判断
- 局部变量在代码块{},方法体{},参数的位置中
- 成员变量在方法外
3 三种变量存储位置的区别
- 实例变量也就是类的属性,存储在堆中,作用域局限于实例对象中,没有static修饰,属性都有默认值,可以不赋值
- 静态变量也叫类变量或全局变量,在方法区中,有static修饰,作用域是整个类,有各种修饰符可以使用除了fianl,都有默认值,可以不赋值
- 局部变量的值存储在栈中
4 三种变量作用域的区别
- 局部变量的值存储在栈中,方法结束后就会被清理,说白就是从局部变量的声明,待方法的’}'结束为止
- 实例变量用this(本类可以缺省)或其他对象通过’.'来调用
- 静态变量可以使用类(本类类名可缺省)或对象通过’.'来调用
5 三种变量声明周期的区别
- 局部变量:每一个线程,每一个执行都是新的生命周期
- 实例变量:随着对象的创建被初始化,随着对象的回收而消亡,每一个对象的实例变量是独立的
- 类变量:随着类的创建被初始化,随着类的回收而消亡,该类的所有对象的类变量是共享的
6 三种变量生命周期的区别
- 局部变量只能有final修饰,没有默认值必须进行显示赋值
- 实例变量可以被全部的修饰符修饰,如public volatile fianl…
- 静态变量不能被fianl修饰,其它的均可
JVM内存参考
堆:唯一的作用就是存放实例变量,主要是数据和对象实例
虚拟机栈:简称栈,用于存储各种类型的局部变量,方法执行完自动释放
方法区:用于存储常量,静态变量,已被虚拟机加载的类信息和即使编译后产生的代码数据