一、内存分区
栈区:方法的工作空间,数据结构是后进先出
堆区:二叉树(稳定),存放对象,分为属性空间和方法空间
方法区:
- 代码区
- 类代码区
- 共享代码区:静态代码区,实例代码区 - 数据区
- 静态数据区
- 常数据区
二、结构化程序设计和面向对象程序设计
结构化程序设计是以功能为核心,面向对象程序设计是以对象为核心
结构化程序设计存在的问题:
1.数据和方法是分离的
2.维护性能差
对象:事物在问题领域的抽象
领域模型:对象之间的关系抽象成类和类之间的关系
三、构造方法语法:
1.方法名和文件名相同
2.方法没有返回值
注意:
1.一个类中可以有多个构造方法,只要保证参数不同就行,也就是方法的重载
2.构造方法里的参数可以是0个,1个或者多个
3.构造方法必须通过new或者是系统调用
4.不要在构造方法中定义与实例属性同名的局部变量。因为局部变量只能在方法的内部访问,这些局部变量会屏蔽同名的实例属性。
使用构造方法的目的:给对象的属性做初始化
tips:构造方法在方法区中,通过new将对象的地址给构造方法,构造方法再将对象的属性初始化。如果在类里不写构造方法,默认存在一个无参的构造方法
四、面试题:
1、创建对象有几种方式?构造方法是否都被调用?为什么调用?
有四种方法可以创建对象
1.new 创建对象。这是最常用的方式,需要明确的知道某个类名,并且要提供构造方法才能new对象
2.通过反射创建对象。不知道要创建什么类的对象
3.clone。不会调用构造方法,与原来的对象不是同一个对象,在不同的内存空间
4.序列化。没有调用构造方法,把一个对象通过一个流输入到网络中,再通过流重建一个对象
2、深拷贝和浅拷贝的区别?