Java面向对象类的内存分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boy_of_god/article/details/83270387

1、类的内存分析

类是具有相同数据,相同操作的一组相似对象的抽象,类可以视为具有相似特征,于共同行为的模板,用这个模板可以造很多个对象

父类一般是把好几个子类中相同数据,相同操作抽象出来封装到一起

1.1 、一个对象的内存分析

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午12:01:07
 */
public class Phone {
	String brand;
	int price;
	String color;
	public void call(String name) {
		System.out.println("给" + name + "打电话");
		
	}
	public void sendMessage() {
		System.out.println("群发短息");
	}

}

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午12:04:36
 */
public class PhoneDemo_01 {
	public static void main(String[] args) {
		Phone p = new Phone();
		System.out.println("brand:" + p.brand + "-----" + "price:" + p.price +"-----" + "color:" + p.color);
		p.brand = "apple";
		p.price = 2300;
		p.color = "black";
		System.out.println("brand:" + p.brand +"-----" + "price:" + p.price +"-----" + "color:" + p.color);
		p.call("乔布斯");
		p.sendMessage();
		
	}

}

运行结果:
在这里插入图片描述
内存分析:
在这里插入图片描述

1.2、两个对象一个方法的内存分析

1.2.1、事例一

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午12:01:07
 * 一个对象的内存图:一个对象的基本初始化
 * 两个对象的内存图
 */
public class Phone {
	String brand;
	int price;
	String color;
	public void call(String name) {
		System.out.println("给" + name + "打电话");
		
	}
	public void sendMessage() {
		System.out.println("群发短息");
	}

}

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月19日 - 下午3:32:36
 */
public class PhoneDemo_02 {
	public static void main(String[] args) {
		Phone p = new Phone();
		System.out.println("brand:" + p.brand + "-----" + "price:" + p.price +"-----" + "color:" + p.color);
		p.brand = "apple";
		p.price = 2300;
		p.color = "black";
		System.out.println("brand:" + p.brand +"-----" + "price:" + p.price +"-----" + "color:" + p.color);
		p.call("乔布斯");
		p.sendMessage();
		Phone p2 = new Phone();
		p2.brand = "HUAWEI";
		p2.price = 2999;
		p2.color = "white";
		p2.call("任正非");
	    p2.sendMessage();
		
	}

} 

运行结果:
在这里插入图片描述
内存分析:
在这里插入图片描述

1.2.2、实例二

package Opp_01;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午7:53:02
 */
public class Student {
	//属性
	String name;
	int id;
	int age;
	String gender;
	int weight;
	
	
	//行为方法
	public void study() {
		System.out.println(name + "正在学习");
	}
	public void sayHello(String sname) {
		System.out.println(name + "向"+ sname+"说你好");
	}
}

package Opp_01;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午7:58:54
 */
public class StudentDemo {

	public static void main(String[] args) {
		//通过类加载器加载方法区中就有student类的信息(字节码)
		Student stu = new Student();
		
		stu.name = "艾弗森";
		stu.id = 11111;
		stu.age = 19;
		stu.study();
		stu.sayHello("科比");
		
	
		Student stu1 = new Student();
		
		stu1.name = "卡特";
		stu1.id = 22222;
		stu1.age = 20;
		stu1.gender = "一班";
		stu1.study();
		stu1.sayHello("科比");	

	}

}

运行结果;
在这里插入图片描述
内存分析:
在这里插入图片描述

1.3、 一个对象两个引用的内存分析

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 下午12:01:07
 * 一个对象的内存图:一个对象的基本初始化
 * 两个对象的内存图
 */
public class Phone {
	String brand;
	int price;
	String color;
	public void call(String name) {
		System.out.println("给" + name + "打电话");
		
	}
	public void sendMessage() {
		System.out.println("群发短息");
	}

}

package opp.java_02;
/**
 * @author zhao xuke
 *
 * 2018年10月20日 - 上午8:39:36
 */
public class PhoneDemo_03 {
	public static void main(String[] args) {
		Phone p = new Phone();
		System.out.println("brand:" + p.brand + "-----" + "price:" + p.price +"-----" + "color:" + p.color);
		p.brand = "OPPO";
		p.price = 2300;
		p.color = "黑色";
		System.out.println("brand:" + p.brand + "-----" + "price:" + p.price +"-----" + "color:" + p.color);
		
		
		
		Phone p2 = p;
		p2.brand = "魅族";
		p2.price = 2400;
		p2.color = "白色";
		System.out.println("brand:" + p.brand + "-----" + "price:" + p.price +"-----" + "color:" + p.color);
		System.out.println("brand:" + p2.brand + "-----" + "price:" + p2.price +"-----" + "color:" + p2.color);
		
		
	}

}

运行结果:
在这里插入图片描述
内存分析:
在这里插入图片描述

1.4、类的嵌套

package opp.java_01;
/**
 * @author zhao xuke
 *
 * 2018年10月18日 - 上午10:52:12
 */
//电脑类
class Computer{
	String brand;
	
}
//学生类
public class Student {
	//属性fields
	String name;
	int age ;
	int id;
	Computer computer;
	
	
	//方法(行为)
	public void study() {
		System.out.println("我会学习,我用" +computer.brand+"学习");
	}
	public void play() {
		System.out.println("我会玩");
	}
	public static void main(String[] args) {
		Computer comp = new Computer();
		//打印类对象的地址
		System.out.println(comp);
		comp.brand = "器械革命";
		Student stu = new Student();//new干三件事情1、在堆中开辟空间2、在堆中创建对象实例化对象(创建对象)3、调用构造函数初始化成员变量
		System.out.println(stu);
		stu.id = 1000;
		stu.name = "张三";
		stu.age = 20;
		stu.computer = comp;
		stu.study();
	}

}
 

运行结果:
在这里插入图片描述
内存分析:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/boy_of_god/article/details/83270387
今日推荐