首先介绍几个概念
栈:
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 }
下面用一个自己做的小视频结合代码理解。