版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
}
运行结果:
内存分析: