java面向对象在计算机中的执行原理--学习笔记

举个栗子

先创建一个狗类,有属性狗的名字,狗的品种和方法让狗发出叫声,代码如下

public class Dog {
    String name;    //名字
    String kind;    //品种

    public void bark(){ //发出叫声方法
        System.out.println(kind + name +"在汪汪叫");
    }
}

然后执行下面这段代码

public class test1 {
    public static void main(String[] args) {
        Dog d1 = new Dog(); //定义第一只狗
        d1.name = "小白"; //赋初值
        d1.kind = "二哈";
        d1.bark();  //让第一只狗发出叫声

        Dog d2 = new Dog(); //定义第二只狗
        d2.name = "小黄"; //赋初值
        d2.kind = "金毛";
        d2.bark();  //让第二只狗发出叫声
    }
}

那么这段代码到底在内存中到底是怎麽执行的呢?

首先,可以看到这段程序会先执行test1类,因此先将test1放到方法区,然后执行main方法,mian方法是在栈内存中执行,所以会在栈内存中创建main方法的栈帧

java面向对象在计算机中的执行原理--学习笔记_第1张图片

main方法中的第一行代码首先创建一个狗对象,首先接触到的是狗类Dog,因此会将狗类也加载到方法区中

java面向对象在计算机中的执行原理--学习笔记_第2张图片

然后就是在栈内存main方法内创建一个新变量d1,并在堆区内创建一个新的狗类对象,将新对象的地址赋给d1变量,(d1是局部变量,所以存放在栈区,而new出来的对象都是存放在堆区),对象地址中除了存储对应的属性还存放着对应类的地址

java面向对象在计算机中的执行原理--学习笔记_第3张图片

然后通过变量存储的对象地址找到对象,给对象的属性赋值,并且通过对象中存储的类地址找到类,然后调用类中的方法

java面向对象在计算机中的执行原理--学习笔记_第4张图片

然后创建第二个变量和对象,并且赋值后执行对应类方法,注意此时第二个对象存储的属性不同,所以调用类方法时输出的也是第二个对象对应的属性结果

java面向对象在计算机中的执行原理--学习笔记_第5张图片

所以说,对象在内存中的执行就是先根据变量存储的地址找到对象,然后修改对象的属性值,再通过变量存储的地址找到对象,然后通过对象存储的类地址找到类,调用类中的方法,不同对象调用时类使用的属性也是对应对象的属性

你可能感兴趣的:(学习笔记,java,开发语言,学习,笔记)