0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

来自《Effective Java》的57条程序设计建议

每一条都是在编程经验中总结的,即使看完了Effective Java这本书,也不能说明完全懂了,列出了这些建议,看看自己每次看到这些建议时,有没有更加深刻的体会。

创建和销毁对象

1、考虑用静态工厂方法代替构造函数

2、使用私有构造函数强化singleton

3、通过私有构造函数强化不可实例化的能力

4、避免创建重复的对象

5、消除过期的对象引用

6、避免使用终结函数

对于所有对象都通用的方法

7、在改写equals的时候请遵循通用约定

8、改写equals时总是要改写hashCode

9、总是要改写toString

10、谨慎地改写clone

11、考虑实现Comparable接口

类和接口

12、使类和成员的可访问能力最小化

13、支持非可变性

14、复合优先于继承

15、要么专门为继承而设计,并给出文档说明,要么禁止继承

16、接口优于抽象类

17、接口只是被用于定义类型

18、优先考虑静态成员类

C语言结构的替代

19、用类代替结构

20、用类层次来代替联合

21、用类来代替enum结构

22、用类和接口来代替函数指针

方法

23、检查参数的有效性

24、需要时使用保护性拷贝

25、谨慎设计方法的原型

26、谨慎的使用重载

27、返回零长度的数组而不是null

28、为所有导出的API元素编写文档注释

通用程序设计

29、将局部变量的作用域最小化

30、了解和使用库

31、如果要求精确的答案,请避免使用float和double

32、如果其他类型更适合,则尽量避免使用字符串

33、了解字符串连接的性能

34、通过接口引用对象

35、接口优先于映像机制

36、谨慎地使用本地方法

37、谨慎地进行优化

38、遵守普遍接受的命名惯例

异常

39、只针对不正常的条件才使用异常

40、对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常

41、避免不必要地使用被检查的异常

42、尽量使用标准的异常

43、抛出的异常要适合于相应的抽象

44、每个方法抛出的异常都要有文档

45、在细节消息中包含失败 - 捕获信息

46、努力使失败保持原子性

47、不要忽略异常

线程

48、对共享可变数据的同步访问

49、避免过多的同步

50、永远不要在循环的外面调用wait

51、不要依赖于线程调度器

52、线程安全性的文档化

53、避免使用线程组

序列化

54、谨慎地实现Serializable

55、考虑使用自定义的序列化形式

56、保护性地编写readObject方法

57、必要时提供一个readResolve方法

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法