面向对象---------内存图(四)

1.一个对象的内存图

class Demo1_Car {
	public static void main(String[] args) {
		Car c1 = new Car();				//创建对象

		//调用属性并赋值
		c1.color = "red";				//为车的颜色赋值
		c1.num = 8;					//为车的轮胎数赋值

		//调用行为
		c1.run();
		
	}
}
/*
车的属性
	车的颜色
	车的轮胎数
车的行为
	车运行
*/

class Car {
	//成员变量
	String color;						//车的颜色
	int num;						//车的轮胎数

	public void run() {					//车运行
		System.out.println(color + "..." + num);
	}
}

2.两个对象的内存图

class Demo1_Car {
	public static void main(String[] args) {
		Car c1 = new Car();				//创建对象

		//调用属性并赋值
		c1.color = "red";				//为车的颜色赋值
		c1.num = 8;						//为车的轮胎数赋值

		//调用行为
		c1.run();

		Car c2 = new Car();				//创建对象
		c2.color = "black";				//为车的颜色赋值
		c2.num = 4;					//为车的轮胎数赋值
		c2.run();
		c2 = null;				//用null把原来的地址值覆盖掉了

		c2.run();		//c2里面记录的是null,所以报出空指针异常

	
		
	}
}
/*
车的属性
	车的颜色
	车的轮胎数
车的行为
	车运行
*/

class Car {
	//成员变量
	String color;						//车的颜色
	int num;						//车的轮胎数

	public void run() {					//车运行
		System.out.println(color + "..." + num);
	}
}

3.三个引用两个对象的内存图

class Demo1_Car {
	public static void main(String[] args) {
		Car c1 = new Car();				//创建对象

		//调用属性并赋值
		c1.color = "red";				//为车的颜色赋值
		c1.num = 8;					//为车的轮胎数赋值

		//调用行为
		c1.run();

		Car c2 = new Car();				//创建对象
		c2.color = "black";				//为车的颜色赋值
		c2.num = 4;					//为车的轮胎数赋值
		c2.run();

		//c2 = null;			//用null把原来的地址值覆盖掉了

		//c2.run();		//c2里面记录的是null,所以报出空指针异常

		Car c3 = c2;
		c3.run();
		
	}
}
/*
车的属性
	车的颜色
	车的轮胎数
车的行为
	车运行
*/

class Car {
	//成员变量
	String color;						//车的颜色
	int num;						//车的轮胎数

	public void run() {					//车运行
		System.out.println(color + "..." + num);
	}
}

4.成员变量与局部变量的区别

A:在类中的位置不同
    * 成员变量:在类中方法外
    * 局部变量:在方法定义中或者方法声明上
* B:在内存中的位置不同
    * 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    * 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
* C:生命周期不同
    * 成员变量:随着对象的创建而存在,随着对象的消失而消失
    * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值不同
    * 成员变量:有默认初始化值
    * 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
    
* 注意事项:
    * 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
    * 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
    * 引用数据类型变量包括哪些:数组,类,接口,枚举

成员变量与局部变量有什么区别?

类的位置,内存位置,生命周期,初始化值

补充:调用方式不同,局部变量的调用,在方法内直接调用即可,成员变量的调用,需要使用对象.成员变量调用

在使用变量的过程中, 查找变量的顺序是什么?

就近原则
class Demo2_Person {
	public static void main(String[] args) {
		Person p = new Person();
		p.speak();
	}
}

class Person {
	String name;						//成员变量
	int num;

	/*public void speak(int x) {
		int num = 10;				//x和num都是局部变量
		System.out.println(name);
	
		System.out.println(num);
	}*/

       public void speak() {
		int num = 10;				//num是局部变量
		System.out.println(name);
	
		System.out.println(num);
	}
}

猜你喜欢

转载自blog.csdn.net/mqingo/article/details/81902480
今日推荐