成员变量:  定义在类中变量

局部变量:  定义在方法中变量


区别:

1. 应用范围  

  1. 成员变量在整个类内都有效    

    2. 局部变量只在其声明的方法内有效

2. 生命周期  

: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失

: 使用完马上释放空间。

void show(int id){	
					for(int i=0;i<10;i++){
					 	for(int j=0;j<10;j++){
							System.out.println(id);
						}
					}
				}

这时候  id,i,j者是在方法内声明的,全是局部变量

j当里层for循环执行它的生命周期开始,当里层for结束,j消失

i当外层for循环执行它的生命周期开始,当外层for结束,j消失

id在方法被调用时开始,方法结束时,id消失.

3. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 

                      局部变量存在栈内存中,当不在使用时,马上就会被释放。

4. 初始值

成员变量它存储在堆中,如果没有赋初值,它有默认值。

   1. 整数byte、short、int、long =0;

   2. char='\uoooo';

   3. boolean =flase;

   4. String =null;

   5. 类类型 =null;

   6. 数组 =null;

局部变量,如果要想使用必须手动初始化.

  

    i. 方法中,参数列表中,语句中。

    ii. 必须给初始化值,没有初始值,不能使用在栈内存中

可为什么成员变量不要初始化,而局部变量需要呢?

我从网上搜的答案:

java object成员变量 java里的成员变量_内存

内存分析:

案例一:

//汽车
class Car {
	//汽车应该具备的属性
	int num;
	//汽车具备的颜色
	String color;
	//汽车跑的行为
	public void run(){
		System.out.println(num+"轮子的汽车跑起来啦");
	}
}
public class CarDemo{
	
	public static void main(String[] args)
	{	//创建实体,并且给该实体起一个名字
		Car c = new Car();
		c.color = "red";
		c.num = 4;
		c.run();//指挥车进行运行。调用格式:对象.对象成员
		
	}
}

内存图:

java object成员变量 java里的成员变量_成员变量_02

案例二:

public static void main(String[] args)
	{	//创建实体,并且给该实体起一个名字
		Car c = new Car();
		Car c1 = new Car();
		c.color = "red";
		c1.num = 4;
		System.out.println(c1.color);
		c.run();//指挥车进行运行。调用格式:对象.对象成员
		
	}

内存图:

java object成员变量 java里的成员变量_局部变量_03

案例三:

public static void main(String[] args)
	{	//创建实体,并且给该实体起一个名字
		Car c = new Car();
		Car c1 = c;
		c.color = "red";
		c1.num = 4;
		c1.color = "green";
		System.out.println(c1.color);
		c.run();//指挥车进行运行。调用格式:对象.对象成员
		
	}

内存图:

java object成员变量 java里的成员变量_内存_04