1.使用静态工厂方法替代构造方法

静态工厂方法的优点:
不像构造方法,它是有名字的。
它不需要每次调用时都创建一个新对象。
它可以返回 其返回类型的任何子类型的对象。
返回对象的类可以根据输入参数的不同而不同。
在编写包含该方法的类时,返回的对象的类不需要存在。

2.当构造方法参数过多时请使用 builder 模式

当一个对象中,属性过多时,使用构造方法时,参数过多导致难以维护,并且很难读懂每个参数的含义是什么。

使用 构造方法 来构建必传参数,而用 setter 的方式来传可选参数呢?这看似参数少,创建实例也很容易,并且所生成的代码也易于阅读。但由于 JavaBeans 模式本身有严重的缺陷,由于构造方法在多次调用中被分割,导致 JavaBeans 可能处于不一致的状态,并且还需要额外增加工作以确保线程安全。

最好处理参数过多的方法是使用 builder 模式,它结合了可伸缩构造方法模式的安全性和 JavaBeans 模式的可读性,然后在调用 builder 对象的 setter 相似方法来设置每个可选参数。

3.使用依赖注入的方式注入资源

依赖注入的实践将极大地增强类的灵活性、可重用性和可测试性。

4.不要创建不必要的对象

如果对象是不可变的,它总是可以被重用的,比如 String 类是 final 的,不可变的,最好不要用 new String("test"), 因为它每次都会创建一个新的对象。在性能有严格要求的情况下,优先使用基本类型而不是装箱的基本类型,也要注意无意识的自动装箱,因为它们会影响性能。

5.消除过期的对象引用

这个也就是常说的内存泄露。当一个类自己管理内存时,应该警惕内存泄漏问题。 每当一个元素被释放时,元素中包含的任何对象引用都应该被清除。

另一个常见的内存泄漏来源是缓存。一旦将对象引用放入缓存中,很容易忘记它的存在,可以用 WeakHashMap 来表示缓存。

6.避免使用 Finalizer 和 Cleaner 机制,请使用 try-with-resources 语句

用于 Finalizer 和 Cleaner 机制的不确定性,我们不知道它到底何时会执行。例如,依赖于 Finalizer 和 Cleaner 机制来关闭文件是严重的错误,因为打开的文件描述符是有限的资源。 如果由于系统迟迟没有运行 Finalizer 和 Cleaner 机制而导致许多文件被打开,程序可能会失败,因为它不能再打开文件了。可以用 try-with-resources 语句 或 try-finally 语句,当打开多个文件时,try-finally 语句的可读性就不如 try-with-resources 语句,因此推荐使用 try-with-resources 语句。

7.重写 equals 方法时同时也要重写 hashcode 方法

重写 equals 方法时,需要满足以下特性。
自反性:一个对象必须与自身相等。
对称性:任何非空引用 x 和 y,如果且仅当 y.equals(x) 返回 true 时 x.equals(y) 必须返回 true。
传递性:如果第一个对象等于第二个对象,第二个对象等于第三个对象,那么第一个对象必须等于第三个对象。
一致性:如果两个对象是相等的,除非一个(或两个)对象被修改了, 那么它们必须始终保持相等。
非空性:对于任何非空引用 x,x.equals(null) 必须返回 false。

每次重写 equals 方法时都必须重写 hashCode 方法,否则程序将无法正常运行。 hashCode 方法必须遵从 Object 类指定的常规约定,将不同的哈希码分配给不同的实例对象。

8.始终重写 toString 方法

Object 类提供了 toString 方法的实现是包名+类名+@+哈希码的无符号十六进制。toString 的通用约定要求,返回的字符串应该是“一个简洁但内容丰富的表示,对人们来说是很容易阅读的”。就需要 toString 方法,方便可读性。

9.考虑实现 Comparable 接口

在需要可比较的场景中,最好实现 Comparable 接口,以便在基于比较的集合中轻松对其实例进行排序,搜索和使用。 比较 compareTo 方法的实现中的字段值时,请避免使用"<"和">"运算符。 最好使用包装类中的静态 compare 方法或 Comparator 接口中的构建方法。

10.使类和成员的可访问性最小化

一个优秀设计的组件隐藏了它的所有实现细节,干净地将它的 API 与它的实现分离开来。然后,组件只通过它们的 API 进行通信,并且对彼此的内部工作一无所知。称为信息隐藏或封装,是软件设计的基本原则。

Java中的四种访问级别:
private——只能自己访问。
package-private——默认级别,同包中的任意类访问。
protected——子类和自己可以访问。
public —— 任何类都可访问。

PS:
清山绿水始于尘,博学多识贵于勤。
我有酒,你有故事吗?
微信公众号:「清尘闲聊」。
欢迎一起谈天说地,聊代码。

优秀代码的必知必会(一)?相关推荐

  1. 分享一个开源的项目,数据结构和算法必知必会的50个代码实现

    数据结构和算法必知必会的50个代码实现 这个开源项目是有前Google工程师打造出来的,使用了c,go,java,python,php等很多中语言实现了一些数据结构和算法,对于喜欢算法的来说可谓是一个 ...

  2. MySQL必知必会 代码+说明 全书整理

    前不久收获一本<mysql必知必会>实体书,这周得空将整本书再次回顾了下. 整理了书中全部的代码,加上了必要的语句说明. 我所使用的软件版本:mysql workbench 8.0.15 ...

  3. 风控成长之路---必知必会工具与业务

    关注 "番茄风控大数据",获取更多数据分析与风控大数据的实用干货. 偶然翻开多年前的笔记,当时踏入数据行业就是从人生的第一条select的代码开始.还好多年前做的笔记,网络云盘还为 ...

  4. Android 性能优化必知必会(2020-5-16)

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  5. 猿创征文|计算机类学生必知必会的开发工具

    计算机类学生必知必会的开发工具目录 前言 一.浏览器工具 1.在线工具 2.插件扩展 二.优化电脑使用工具 1.notpad++ 2.plotplayer 3.Office Tool Plus--强大 ...

  6. 性能调优之JMH必知必会2:JMH的基本用法

    性能调优之JMH必知必会2:JMH的基本用法 JMH必知必会系列文章(持续更新) 一.前言 二.JMH的基本用法 1.添加JMH依赖包 2.@Benchmark 2.@Warmup和@Measurem ...

  7. Java架构师必知必会,带走不谢

    可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地. 成为Java架构师,需要掌握哪些技能呢 ...

  8. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战

    本文涵盖 前言 高级函数概念 函数作为参数的高阶函数 map filter reduce sort详解与实战 函数作为返回值的高阶函数 isType函数与add求和函数 如何自己创建高阶函数 前言 一 ...

  9. php7.2 开启mcy扩展,phper必知必会(二)

    1.说说你对进程,线程以及协程的理解 进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础.进程是程序基本执行的实体.进程与进程之间是独立的,拥有完全独立的地址空间,进程的切换只发生在内 ...

  10. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

最新文章

  1. .NET平台开源项目速览(1)SharpConfig配置文件读写组件
  2. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表
  3. 《SpringBoot揭秘:快速构建微服务体系》—第2章2.4节本章小结*
  4. access表怎么生成表结构_数据结构——单链表讲解
  5. 学习笔记(36):Python网络编程并发编程-IO模型介绍
  6. 小程序 const moment = require('moment')_C++大作业-XXX管理程序
  7. 每日一题丨2020.05.27
  8. 周一“开小差” 淘宝又崩了
  9. poj 2778 DNA Sequence
  10. CAD如何导出PDF格式
  11. 卡巴斯基2010激活码
  12. Si24R1,CI24R1,nRF24L01简单解析对比
  13. 中望3d快捷键命令大全_cad快捷键大全下载
  14. DELL R740服务器系统安装详细过程
  15. IPU相关知识(一)
  16. java Socket长连接
  17. 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
  18. React 全家桶入门教程 01
  19. 关于“Multimedia Tools and Applications”sci-4投稿那些事
  20. 【java】家庭收支管理系统

热门文章

  1. 神经网络无法区分异同,而且这个缺陷是本质性的
  2. 寒武纪上市:AI芯片和普通芯片有何不同?全球AI芯片公司大全都在这里了
  3. 白春礼:探究物质世界奥秘的一把金钥匙——纪念元素周期表发表150周年
  4. 邬贺铨:解读5G技术关键点,及如何影响AIoT
  5. 下一个汽车万亿市场打开!氢能源时代正到来
  6. 他开发了 redux,昨晚“字节一面”却挂了?
  7. LeetCode 滑动窗口(Sliding Window)类问题总结
  8. vuex基础到模块化
  9. springcloud搭建篇
  10. spring security 自定义认证登录