【面向对象内存分析】
面向对象执行内存分析
【博客】高瑞林
【博客地址】http://www.cnblogs.com/grl214
面向对象 |
以类的方式组织代码,以对象的方式封装数据。
封装性:
封装是一种信息隐蔽技术,它体现于类的说明,使数据更安全.是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块, 使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装 的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:
继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。
继承具有传递性和单根性.如果B类继承了A类,而C类又继承了B类,则可以说,C类在继承了B类的同时,也继承了A类,C类中的对象,可以实现A类中的方法.一个类,只能够同时 继承另外一个类,而不能同时继承多个类,通常所说的多继承是指一个类在继承其父类的同时,实现其他接口.类的对象是各自封闭的,如果没继承性机制,则类对象中数据、 方法就会出现大量重复。继承支持系统的可重用性,从而达到减少代码量的作用,而且还促进系统的可扩充性。
多态性:
对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现 细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件 而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的 不同 方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来 实现多态性。
内存分析(一) |
创建一个student类
public class Student { // static data String name; int id; String sex; String address; int age; Computer computer; // dynamic behavior public void say() { System.out.println(name + age + "say hello"); } public void study(String sname) { System.out.println(name + " and " + sname + "studying"); } public static void main(String[] args) { /* * Through class Loader upload this Student class ,In the * method section is the Student class information. */ Student s1 = new Student(); s1.name = "Mr gao"; s1.study("Mr wang"); Student s2 = new Student(); s2.age = 10; s2.name = "Mrs li"; s2.say(); } }
内存结构图 |
内存分析(二) |
public class Computer { //static data String brand; int cupSpeed; //dynamic method public void run(){ }
public class Test { public static void main(String[] args) { Student s = new Student(); s.name = "Mr gao"; s.age = 10; Computer p = new Computer(); p.brand = "ASUS"; p.cupSpeed = 100; s.computer = p; System.out.println(s.computer.brand); } }
内存结构图 |
----------------------谢谢观看------------------------