面向对象执行过程内存分析

【面向对象内存分析】


 

面向对象执行内存分析

【博客】高瑞林

【博客地址】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);
            

    }

}

 

内存结构图

 

                    ----------------------谢谢观看------------------------

 

posted @ 2017-10-29 20:41  高瑞林  阅读(546)  评论(0编辑  收藏  举报