1.4(java学习笔记) 面向对象内存分析

 

首先介绍几个概念

栈:

1.栈是方法执行的内存模型,每调用一个方法都会创建一个栈帧。

2.jvm为每个线程创建一个栈,存放方法相关信息,栈属于线程私有不共享。

3.栈由系统自动分配,是连续的内存空间,速度快。

4.栈的特点是先进后出。

堆:

1.堆用于存放创建好的对象。

2.jvm只有一个堆被所有线程共享

3.堆是不连续的内存空间,但由于不连续分配灵活。

静态区:

1.静态区只有一个被所有线程共享。

2.静态区其实也是堆,用来存放常量,类等不变的信息。

以下列代码为例:

有些部分忽略了,只是简述下过程,理解错误之处还望指出。

1 public class Student {  //首先构造了一个学生类,里面包含一些基本信息(姓名,学生所使用电脑信息)
 2     String name;
 3     Computer user_computer;
 4     
 5     void study(){       //还有学生学习(学习的方法中又包含一个电脑的对象)和玩耍的方法
 6         System.out.println("我在学习" + user_computer.brand);
 7     }
 8     void play(){
 9         System.out.println("我在玩耍");
10     }
11     
12     public static void main(String[] args){
13         Student stu_huangChangfan = new Student();//首先根据学生类这个模板创建一个具体的对象
                                                     //huangChangfan这个对象中包含姓名,使用电脑品牌基本属性
14         Computer comput = new Computer();         //以及玩耍和学习的方法(学习方法中又包含一个电脑对象)
                                                     //这时需要创建一个电脑对象,并对其赋值。
15         comput.brand = "联想";                     //对新建的对象赋值
16         stu_huangChangfan.user_computer = comput; //电脑对象有了具体的信息后赋给学生对象中的电脑对象。
17         stu_huangChangfan.study();                //调用学生对象中方法。
18         stu_huangChangfan.play();
19     }
20 }
21     
22 class Computer{  //电脑类,其中包含电脑品牌等信息。
23     String brand;
24 }

下面用一个自己做的小视频结合代码理解。

原文地址:https://www.cnblogs.com/huang-changfan/p/9304500.html