一:面向对象内存图(简易的)
(上课内容讲解笔记)
栈 堆
解释:
有一个Car.java和Test.java两个类
(1)左边是栈,右上是堆,右下指的方法区
(2)main方法入栈
(3)方法区里执行的是.class文件,不是.java。
方法区存放类的属性和方法。
(4)执行Car c1,在栈里会开辟一个空间,执行完new Car后,这个空间存放的就是对象在堆里面的地址
(5)执行new Car后,堆里会有一个空间,里面存放的是 属性初始值和方法的地址(即方法区的地址)。
(6)调用c1的属性后,属性从原来的初始值变成赋予的值,调用方法后,找到堆里的方法的地址,根据地址找到方法区,方法此时入栈。
(7)方法执行完后,会自动出栈,移除。
二:成员变量和局部变量
| 成员变量 | 局部变量 |
在类中的位置不同 | 类中方法外 | 方法内或者方法声明上 |
在内存中的位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的初始化值 | 没有默认的初始化值,必须先定义,赋值,才能使用。 |
根据上图过程,加深理解
三:匿名对象
匿名对象:就是没有名字的对象,是对象的一种简化表示形式
匿名对象的两种使用情况:1.对象调用方法仅仅一次的时候 2. 作为实际参数传递
new Car(); //匿名函数
new Car().color="red";
System.out.println(new Car().color); //结果是null,每new一次,就是一次新的对象,color初始值是null
注意:每new一次,就产生一个匿名对象,每个匿名对象是不同的。
四:构造方法
格式:方法名与类名相同;没有返回值类型,连void都没有;没有具体的返回值
注意:1.如果你不提供构造方法,系统会给出默认构造方法;
2.如果你提供了构造方法,系统将不再提供;
3.构造方法也是可以重载的
构造方法的作用:对象的数据进行初始化