成员变量和局部变量的区别:
1).成员变量:
A.定义在"类体"中;可以是任何数据类型;
B.会被自动初始化;
class Student{
String name;
void show(){
System.out.println("我叫:" + num); //打印:我叫:null
}
}
C.当实例化对象后,被存储在"堆"中;
D.当"对象"不被使用(没有任何引用),并被垃圾回收器回收时被清理;
2).局部变量:
A.定义在某个方法、或其它代码块中;
B.必须显示初始化,否则不能访问其值;
class Student{
void show(){
String name;
System.out.println("我叫:" + name); //编译错误。局部变量必须显示初始化才能访问其值;
name = "张三"; //OK。可以被赋值。
}
}
C.当方法或其它代码块被执行时,基本数据类型的"值"和引用数据类型的"引用"都是存储在"栈"中;
D.当方法或代码块执行完毕时,会被立即清理;- /*
- 局部变量:
- 1.定义的位置:在某个方法,或者代码块内部;
- 2.在内存中的位置:在"栈"中:
- 基本数据类型:int a = 10; //a 和10 都存储在栈中
- 引用数据类型:int[] array = new int[3];// array 和 "数组的引用"都存储在栈中;
- 3.在使用(获取值)前,必须要先赋初始值;
- 4.当所在的方法,或者代码块执行完毕,对于"局部变量"的"栈"内存,会立即释放;
- 成员变量:
- 1.定义的位置:在"类体"中;
- 2.在内存中的位置:在"堆"中;
- 3.定义后,即使不赋初始值,也可以直接访问。因为JVM会自动赋初始值:
- 整数:0
- 小数:0.0
- 字符:'\u0000'
- 布尔:false
- 引用类型:null
- 4.当栈中的引用消失后,堆中的内容不会立即消失,会成为垃圾,后期被"垃圾回收器"自动检测,并处理。
- */
- class Book
- {
- String name;//成员变量
- String author;//成员变量
- }
- class Demo
- {
- public static void main(String[] args)
- {
- int a = 10 ;//局部变量
- int[] arr = {24,4,23};
- System.out.println(a);//a此时没有值,编译错误
- for(int i = 0;i < 10 ;i++){//i 是局部变量
- }
- }
- }
复制代码 |
|