《码出高效》读书笔记(下)面向对象

1、面向对象四大特性:抽象、封装、继承、多态

    ​抽象:分为归纳和演绎,归纳是从具体到本质,从个性到共性,演绎是联系推理。

    ​封装:决定哪些信息公开,目的是解耦(参考迪米特法则)​

    ​继承:继承是为了复用(参考里氏替换),但滥用继承可能会导致方法污染甚至方法爆炸。

    ​多态:通过重载动态表达需求。

2、接口和抽象类的区别​​​

    ​从语法上看:

    ​    ​​1)接口不能有方法实现,包括静态方法块;

    ​    ​​​2)接口支持多基础,而静态方法不支持;

    ​从功能上看:

    ​    ​接口是契约式设计,而抽象类是模板式设计。

3、内部类的好处

    ​1)作用域不会扩展到包外

    ​2)可以通过“外部类.内部类”的方式直接访问

    ​3)内部类可以访问外部类的所有静态属性和方法

4、访问权限控制

    ​对于【任何地方】、【包外子类】、【包内】、【类内】四个范围:

    ​public 分别是可见、可见、可见、可见;

    protected 分别是 不可见、可见、可见、可见;

    ​缺省 分别是 不可见、不可见、可见、可见;

    ​private 分别是 不可见、不可见、不可见、 可见。​

5、序列化和反序列化

    ​1)序列化的过程是把数据​​​对象转换为二进制流的过程。

    2)​序列化的方式常见有三种:

    ​① Java 原生序列化

    需要实现​​​Serializable接口,并设置serialVersionUID字段,确定是跨语言、性能一般。

    ② Hessian 序列化

    ​支持跨语言看,序列化和反序列化时间较Java原生序列化短很多,并且增加了压缩编码,二进制流小很多。

    ​Hession序列化会先序列化子类,所以会导致序列化结果中类成员变量被父类覆盖。

    ③ JSON 序列化​​​​

    ​将对象转换为JSON字符串,可读性更好,方便调试。

    ​​​3)序列化安全问题

    ​通过在反序列化过程构造恶意代码实现攻击。解决方案是可以将不需要序列化的敏感字段加transient字段,或者将数据进行加密再序列化。​

6、对象结构

    ​对象在内存中包含三部分:对象头、​​实例数据、对齐填充。

    1)​对象头存储了Mark Word和类元信息,Mark Word中是哈希码、GC标记、锁信息、线程关联信息等,类元信息中​类元数据(即Klass)的首地址。

    ​2)实例数据中是对象的实例成员变量和可见的父类成员变量。

    ​​3)对齐填充是为了保证对象的大小是字节的倍数。

​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值