1、 OOP 理论
面向对象: 继承、封装、多态,
注意: 抽象是程序员的核心素质之一,体现出程序员对业务的建模能力,以及对架构的宏观掌控力Clone() : 浅拷贝、一般深拷贝、彻底深拷贝
- 浅拷贝:只复制当前对象的所有基本数据类型,以及相应的引用变量,但没有复制引用变量指向的实际对象;
- 彻底深拷贝:在成功clone一个对象之后,此对象与母对象在任何引用路径上不存在共享的实例对象,但是引用路径递归越深,则越接近JVM底层对象,且发现彻底深拷贝实现难度越大
- 一般深拷贝: 介于浅拷贝和彻底拷贝之间
对象的clone()方法
默认是浅拷贝,深拷贝则要复写colne()方法实现引用对象的深度遍历式拷贝 多态: 指在编译层面无法确定最终用的方法体,以覆写为基础来实现面向对象特征,在运行期由JVM进行动态绑定,调用合适的覆写方法体来执行。
- Override: 覆写,是子类实现接口,或者继承父类时,保持方法签名完全相同,实现不同的方法体,是垂直方向上行为的不同实现;
- Overload: 重载,方法名称是相同的,但是参数类型或参数个数是不相同的,是在水平方向上行为的不同实现;是编译期确定方法调用,属于静态绑定,本质上重载的结果是完全不同的方法
2、 类关系
- 继承:extends(父类与子类之间关系:is-a)
- 实现:implements(接口与实现类之间的关系:can-do)
- 组合:类是成员变量(比聚合更强的关系:contains-a),
两者完全不可分,具有相同的生命周期 - 聚合:类是成员变量(暂时组装关系:has-a)
- 依赖:一个类用到里一个类(use-a)
3、 序列化
定义:将数据对象转换为二进制流的过程称为对象的序列化
功能:内存中的数据对象只有转换为二进制流才可以进行数据持久化和网络传输。
4、同步与异步
- 同步调用是刚性调用,是阻塞式操作,必须等待调用方法执行结束
- 异步调用是柔性调用,是非阻塞是操作,
5、 数据类型
引用分成两种数据类型:
引用变量本身(Reference Variable,简refvar),和引用指向的对象(Referred Object,简refobj)
- refvar是基本的数据类型,它的默认值是null,
存储refobj的首地址,可以直接使用双等号==进行等值判断,不管它指向包装类、集合类、字符串类还是自定义类,refvar均占4B空间。 - refobject 无论是多么小的对象,最少占用的存储空间是12B(用于存储基本信息,称为对象头),但由于存储空间分配必须是8B的倍数,所以初始分配的
空间至少是16B对象分配 对象头,对象头占12个字节,存储内容对象标记(MarkOop)和类元信息(KlassOop)。 对象标记存储对象本身运行时的数据,在64位JVM上占8个字节,称"Mark Word";类元信息存储的是对象指向它的类元数据(Klass)的首地址,占4个字节- 实例数据(Inatance Data),存储本类对象的实例成员变量和所有可见的父类成员变量
- 对奇填充(Padding),对象的存储空间分配单位是8个字节
6 包装类型
功能:解决了基本数据类型无法做到的事情:泛型类型参数、序列化、类型转化、高频区间数据缓存
- 包装对象其缓存区间的数据由缓存产生,如:Integer var =?,在-128-127之间的赋值,Integer对象由IntegerCache.cache产生,会
复用已有对象,但在这个区间外的数据都在堆上产生,并不会复用已有对象。合理利用缓存,提升程序性能
- BOOlean: 使用静态final变量定义,valueOf()就返回这两个静态值
- Integer: 唯一可以修改缓存范围的包装类,在VM options 加入参数 -XX:AutoBoxCacheMax=7777,即可设置最大缓存为7777