java面向对象在计算机中的执行原理--学习笔记
举个栗子先创建一个狗类,有属性狗的名字,狗的品种和方法让狗发出叫声,代码如下然后执行下面这段代码那么这段代码到底在内存中到底是怎麽执行的呢?首先,可以看到这段程序会先执行test1类,因此先将test1放到方法区,然后执行main方法,mian方法是在栈内存中执行,所以会在栈内存中创建main方法的栈帧main方法中的第一行代码首先创建一个狗对象,首先接触到的是狗类Dog,因此会将狗类也加载到方法
举个栗子
先创建一个狗类,有属性狗的名字,狗的品种和方法让狗发出叫声,代码如下
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方法的栈帧

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

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

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

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


所以说,对象在内存中的执行就是先根据变量存储的地址找到对象,然后修改对象的属性值,再通过变量存储的地址找到对象,然后通过对象存储的类地址找到类,调用类中的方法,不同对象调用时类使用的属性也是对应对象的属性
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)