Java编程思想
文章平均质量分 93
《Effective Java》、《Java编程思想》等书籍的阅读笔记。
kaikai_sk
我的个人主页:https://kaikai-sk.github.io/
爱生活/爱技术
展开
-
程序设计原则
一个类值应该负责一个职责。客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象。依赖倒置的中心思想就是面向接口编程。依赖倒置基于如下设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构要比以细节为基础搭建的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类。原创 2022-11-03 22:51:32 · 397 阅读 · 0 评论 -
Effective Java 第二版 第5章 泛型、第6章 枚举和注解、第7章 方法
对于未被导出的方法(unexported method),作为包的创建者,你可以控制这个方法将在哪些情况下被调用。因此你可以,并且你也应该确保只将有效的参数值传递进来。因此,例外情况:在有些情况下,有效性检查非常expensive,或者根本是不切实际的,或者有效性检查已经隐含在计算过程中完成了。例如,Collections.sort(List), 列表中的所有对象都应该是可以相互比较的。排序过程中就会进行比较,提前检查列表中的元素是否可以相互比较是没有多少意义的。原创 2022-11-01 17:28:38 · 320 阅读 · 0 评论 -
Domain Driven Design 领域驱动设计
常见的应用程序分为presentation、application和infrastructure三层。application会很容变得臃肿庞大。对infrastructure的依赖也很高,如果基础能力想要进行一些升级操作也是比较困难的。比如说数据库升级是比较困难的。对上面的三层架构进行改进。原创 2022-10-23 20:30:25 · 209 阅读 · 0 评论 -
Effective Java 第二版 第8章 通用程序设计
上述代码的问题就在于suits调用了太多次的next,suits的next应该在外层循环调用。for-each循环就完美的避免了这种问题。值类很少会用多个实现编写,通常也是final的,并且很少有对应的接口。(2)如果对象属于基于类的框架(class-based framework),就应该使用相应的基类来引用这个对象。(1) 产生了太多的运行时错误,如果改为new的方式,那么这些运行时错误就变为了编译时的错误。通过使用标准类库,可以充分利用这些编写标准类库的专家的知识,以及在你之前的其他人的使用经验。原创 2022-10-08 20:56:12 · 225 阅读 · 0 评论 -
Effective Java 第二版 第9章 异常
如果类有“状态相关(state-dependent)”的方法(即只有在特定的不可预测的条件下才可以被调用的方法),那么这个类也应该有状态测试(state-testing)的方法(即指示是否可以调用这个状态相关的方法)。这是一种错误的写法,企图利用java的错误判断机制来提高性能,因为VM对每一次的数组访问都要检查越界情况,误认为正常的循环终止检查被编译器隐藏了。方法中声明要抛出的每一个受检异常,都是对api用户的一种潜在指示:与异常相关联的条件是调用这个方法的一种可能的结果。原创 2022-09-07 10:29:25 · 260 阅读 · 0 评论 -
Effective Java第二版第10章
10 并发第66条:同步访问共享的可变数据如果没有同步,一个线程的变化就不能被其他线程看到。同步不仅可以阻止一个线程看到对象处于不一致的状态之中,它还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护的之前所有修改效果。Java语言规范保证读写一个变量是原子的,除非这个变量为long或者是double。虽然语言规范保证了线程在读取原子数据的时候,不会看到任意的数值,但是它并不保证一个线程写入的值对于另一个线程将是可见的。 为了在线程之前进行可靠的通信,也为了互斥访问,同步是必要的。p原创 2022-05-20 19:29:52 · 172 阅读 · 0 评论 -
Effective Java第二版第2、3章
文章目录2 创建和销毁对象第1条: 考虑用静态工厂方法代替构造器第2条:遇到多个构造器参数时要考虑使用构建者Builder第3条:用私有构造器或者枚举类型强化Singleton属性第4条:通过私有构造器强化类不可实例化的能力第5条:避免创建不必要的对象第6条:消除过期的对象引用第7条:避免使用终结方法(finalize方法)3 对于所有对象都通用的方法第8条:覆盖equals时要遵守通用约定第9条 覆盖equals时总要覆盖hashCode方法第10条 始终要覆盖toString第11条 谨慎地覆盖clon原创 2022-03-30 11:15:22 · 177 阅读 · 0 评论 -
Effective Java第二版第4章
4 类和接口第13条 使类和成员的可访问性最小化当访问级别从default变成protected的时候,会大大增加可访问性。protected的成员是类导出的API的一部分,必须永远得到支持。导出的类的protected成员也代表了该类对于某个实现细节的公开承诺。受保护的成员应该尽量少用。**实例域决不能是公有的。**如果域是非final的,或者是一个指向可变对象的final引用,那么一旦使这个域成为共有的,就放弃了对存储在这个域中的值进行限制的能力;这意味着,你也放弃了强制这个域不可变的能力。同时,原创 2022-03-30 11:47:59 · 2447 阅读 · 0 评论 -
重构·改善既有代码的设计
文章目录3 代码坏味道3.1 神秘命名3.2 重复代码3.3 过长函数3.4 过长参数列表3.5 全局变量3.6 可变数据3.7 发散式变化3.8 霰弹式修改3.9 依恋情节3.10 数据泥团3.11 基本类型偏执3.12 重复的switch3.13 循环语句3.14 冗赘的元素6 第一组重构6.1 函数组合成类6.2 内联函数6.6 封装变量6.10 函数组合成变换7 封装7.6 内联类8 搬移特性8.8 以管道取代循环9 重新组织数据9.1 拆分变量9.3 以查询取代派生变量9.4 将引用对象改为值对象原创 2021-11-16 11:39:00 · 1323 阅读 · 0 评论 -
Effective Java 第二版第11章 序列化
《Effective Java》第二版第十一章,序列化原创 2022-06-23 14:55:37 · 334 阅读 · 0 评论