首页 > 其他分享 >《码出高效》Chapter2面向对象-读书笔记

《码出高效》Chapter2面向对象-读书笔记

时间:2022-11-12 22:56:25浏览次数:84  
标签:异步 码出 读书笔记 对象 Chapter2 调用 Integer 序列化 方法

《码出高效Java开发手册》第2章 面向对象

OOP理念

抽象

封装

继承

多态

抽象是程序员的核心素质之一,体现在对业务的建模能力,以及对架构的宏观掌控力。 抽象是OO思想最基础的能力,正确而严谨的业务抽象和建模分析能力,是后续的封装、继承、多态的基础。在OO的思维中,抽象分为归纳(具体到本质,个性到共性)和演绎(与归纳相反)。

封装,遵从迪米特法则。

继承:LSP。不当继承会出现方法污染和方法爆炸。所以,提倡组合优先原则来扩展类的能力(优先采用组合/聚合的关系来复用其他类的能力)。

多态:就是同一种事物表现出的多种形态。对不同类的对象(它们都实现相同的接口或继承相同的父类/抽象类)发出相同的消息将会有不同的行为。多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。 多态可以让应用程序具有良好的扩展性。

OO语言的代表-Java    
类的定义  
  接口与抽象类

接口:can-do。Dog can Run;Bird can Fly。

抽象类:同基类,is-a。Dog is an Amimal;Cuckoo(布谷鸟) is a Bird.

  内部类

静态内部类:static class StaticInnerClass{}

成员内部类 private class InstanceInnerClass{}

局部内部类:定义在方法里 或 lambda表达式里

匿名内部类:如 (new Thread(){}).start()

  访问权限控制

封装可访问性。封装使OO的世界变得单纯,对象与对象之间的关系变得简单,高内聚低耦合,利于扩展。

访问权限控制符:public/protected/private/无修饰符

  this与super

this与super两个关键字起指代作用,通常可以省略。

可指代构造方法。此时,两者不能同时出现,且只能出现一次,且必须出现在方法体的第一行。

this还可以指代当前对象,比如同步代码块→synchronized(this){...}

  类关系

继承:extends(is-a)

实现:implements(can-do)

组合:类是成员变量(contains-a)

聚合:类是成员变量(has-a)

依赖:除组合与聚合以外的单向弱关系(depends-a)。比如使用其他类的属性/方法,或以其作为方法的参数输入,或作为方法的返回值输出。

关联:互相平等的依赖关系(links-a)

随着业务和架构的发展,类与类的关系是会发生变化的,必须用发展的眼光看待类图。在业务重构过程中,往往会把原来强组合的关系拆开来,供其他模块调用,这就是类图的一种演变。

  对象序列化

内存中的对象只有转换为二进制流才可以进行数据持久化或网络传输。 序列化-Serialization,反序列化-Deserialization

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

Java原生序列化。

Hessian序列化。

JSON序列化。

序列化通常会通过网络传输对象,需要对敏感数据进行安全处理,避免受到攻击(可使用对称/非对称加密方式)。不需要进行序列化传输的,可以加 transient 关键字。

方法 方法签名 方法名+参数列表(参数个数、参数类型)
  参数

防御式编程理念:在方法内,对方法调用方传入的参数保持理性上的不信任。首先做参数预处理:

  1. 入参保护:批量接口,入参是集合的,如id列表,要做数据量控制。再如,分页查询数据的接口,要判断pageSize不能超过阈值。
  2. 参数校验 --------并不是所有方法都需要校验
  类内方法

构造方法

静态方法

实例方法 ----- getter/setter方法

静态代码块:only once

  同步&异步

 同步调用是刚性调用,是阻塞式操作,必须等待调用方法体执行结束。 异步调用是柔性调用,是非阻塞式操作。

异步调用通常用着某些耗时长的操作上,这个耗时方法的返回结果,可以使用某种机制反向通知来实现,或者再一个线程主动轮询。 反向通知方式方式,需要异步系统与调用系统之间进行耦合。而主动轮询呢,对于没有执行完的任务会不断地请求,从而加大执行机器的压力。

某些框架提供了丰富的异步处理方式,或者是把同步任务拆解成多个异步任务等。

  覆写 override, “一大两小”    一大:子类方法的访问权限≥父类方法; 两小:子类方法 抛出的异常、返回值 ≤ 父类方法
重载    
泛型   类型擦除
数据类型 基本类型 8个:boolean byte char short int long double float
  包装类型

高频区间数据缓存: 例如,Integer会缓存[-128,127]之间的值,对于Integer var=?在这个区间的赋值,Integer对象由内部私有静态类IntegerCache.cache产生,会复用已有对象,这个区间的Integer值可以用==比较, 这个区间外的所有数据都会在堆上产生,并不会复用已有对象。(@seemore 听说,你也一直钟爱着equals。。。

Integer var=?这种直接赋值,其实是调用的Integer的静态工厂方法valueOf(int), 这个方法的逻辑是先判断入参是否在缓存区间里,在直接返回缓存中的Integer对象,否则new一个Integer对象。

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

 

  字符串  

标签:异步,码出,读书笔记,对象,Chapter2,调用,Integer,序列化,方法
From: https://www.cnblogs.com/buguge/p/16884935.html

相关文章

  • 【《硬件架构的艺术》读书笔记】01 亚稳态的世界
    听说这本书对数字IC设计中的常见问题讲的非常清楚易懂,看了目录感觉确实都是数字设计中一些关键问题,而且一共才217页,争取这个月看完吧。书的PDF资源:链接:https://pan.baidu......
  • 程序员的修炼之道:从小工到专家 读书笔记五
    第五章 弯曲或折断解耦与得墨忒(tei)耳法则1、把你的代码组织成最小单位(模块),并限制他们之间的交互。如果随后必须替换某个模块,其他模块仍能够继续工作。2、应使耦合减至......
  • 《Go 语言并发之道》读书笔记(一)
    已经把《Go语言并发之道》通读了一遍,非常不错的一本书,对于理解掌握Go语言的并发知识有很大的帮助,接下来我会把书中有用的知识通过代码示例出来,把一些比较好的知识点记录下......
  • Head First Java 读书笔记
    第11章:异常处理如果你把有风险的程序代码包含在try/catch块中,那么编译器会放心很多。try/catch块会告诉编译器你确实知道所调用的方法会有风险,并且也已经准备好要处理......
  • 《代码大全》读书笔记1
    之所以阅读这本书,是想在阅读风格较为轻松的《程序员修炼之道》之后阅读一本更细致、更严肃的“进阶”读物。  *第一部分打好基础 第一章欢迎进入软件构建的世界......
  • 《代码大全2》读书笔记2
    第五章软件构建中的设计 > 设计的限制:设计是一个“险恶”的问题:只有通过解决或至少部分解决,才能明确地定义它。设计中会有很多错误和修正的过程。设计有诸多限制,要......
  • 《代码大全2》读书笔记六
    第十九章一般控制问题19.1布尔表达式【回顾】在读书笔记二、读书笔记三中有关于变量名与布尔变量的讨论,其中提到:布尔变量名应该使用显然有两个状态的名字,如doneok;可......
  • Head First Java 读书笔记
    第10章:数字与静态性Math有什么特点?在Java中没有东西是全局(global)的。但,Math方法是接近全局的方法。Math不能用来创建实例变量。因为Math是用来执行数据计算的,所以......
  • 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记
    这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~原文内容比较充实,建议有时间可以读一下原文.第一章主要是个概览.MySQL......
  • 《高性能MySQL》第一章:MySQL架构与历史 读书笔记
    Chapter.1StructureandHistoryofMySQL1.1MySQLlogicalstructureMySQL逻辑架构如上图所示。最上层服务并非mysql独有,大部分基于网络的工具都有类似的C/S架构。第......