`

高效Java摘要

 
阅读更多

Effective Java

• Creating and Destroying Objects创建和销毁对象

1. Consider static factory methods instead of constructors

考虑用静态工厂方法代替构造器

2. Consider a builder when faced with many constructor parameters

遇到多个构造器参数时要考虑用构建器

3. Enforce the singleton property with a private constructor or an enum type

用私有构造器或者枚举类型强化singleton属性

4. Enforce noninstantiability with a private constructor

通过私有构造器强化不可实例化的能力

5. Avoid creating unnecessary objects

避免创建不必要的对象

6. Eliminate obsolete object references

消除过期的对象引用

7. Avoid finalizers

避免使用终结函数

 

• Methods Common to All Objects对于所有对象都通用的方法

8. Obey the general contract when overriding equals

改写equals时请遵守通用约定

9. Always override hashCode when you override equals

改写equals时总要改写hashCode

10. Always override toString

始终要改写tostring

11. Override clone judiciously

谨慎地改写clone

12. Consider implementing Comparable

考虑实现Comparable接口

 

• Classes and Interfaces类和接口

13. Minimize the accessibility of classes and members

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

14. In public classes, use accessor methods, not public fields

在公有类中使用访问方法而非公有域

 

15. Minimize mutability

使非可变性最小化

16. Favor composition over inheritance

复合优先于继承

17. Design and document for inheritance or else prohibit it

要么为继承而设计,并提供文档说明,要么就禁止继承

18. Prefer interfaces to abstract classes

接口优于抽象类

19. Use interfaces only to define types

接口只用于定义类型

20. Prefer class hierarchies to tagged classes

类层次优于标签类

21. Use function objects to represent strategies

用函数对象表示策略

22. Favor static member classes over nonstatic

优先考虑静态成员类

 

• Generics泛型

23. Don’t use raw types in new code

请不要在新代码中使用原生态类型

24. Eliminate unchecked warnings

消除非受检警告

25. Prefer lists to arrays

列表优先于数组

26. Favor generic types

优先考虑泛型

27. Favor generic methods

优先考虑泛型方法

28. Use bounded wildcards to increase API flexibility

利用有限制通配符来提升API的灵活性

29. Consider typesafe heterogeneous containers

优先考虑类型安全的异构容器

 

• Enums and Annotations枚举和注解

30. Use enums instead of int constants

用enum代替int常量

31. Use instance fields instead of ordinals

用实例域代替序数

32. Use EnumSet instead of bit fields

用EnumSet代替位域

33. Use EnumMap instead of ordinal indexing

用EnumMap代替序数索引

34. Emulate extensible enums with interfaces

用接口模拟可伸缩的枚举

35. Prefer annotations to naming patterns

注解优先于命名模式

36. Consistently use the Override annotation

坚持使用override注解

37. Use marker interfaces to define types

用标记接口定义类型

 

• Methods方法

38. Check parameters for validity

检查参数的有效性

39. Make defensive copies when needed

必要时进行保护性拷贝

40. Design method signatures carefully

谨慎设计方法签名

41. Use overloading judiciously

慎用重载

42. Use varargs judiciously

慎用可变参数(varargs)

43. Return empty arrays or collections, not nulls

返回零长度的数组或者集合,而不是null

44. Write doc comments for all exposed API elements

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

 

• General Programming通用程序设计

45. Minimize the scope of local variables

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

46. Prefer for-each loops to traditional for loops

for-each循环优先于传统的for循环

 

47. Know and use the libraries

了解和使用类库

48. Avoid float and double if exact answers are required

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

49. Prefer primitive types to boxed primitives

原语类型优先于装箱的原语类型

50. Avoid strings where other types are more appropriate

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

51. Beware the performance of string concatenation

了解字符串连接的性能

52. Refer to objects by their interfaces

通过接口引用对象

53. Prefer interfaces to reflection

接口优先于反射机制

54. Use native methods judiciously

谨慎地使用本地方法

55. Optimize judiciously

谨慎地进行优化

56. Adhere to generally accepted naming conventions

遵守普遍接受的命名惯例

 

• Exceptions异常

57. Use exceptions only for exceptional conditions

只针对异常的条件才使用异常

58. Use checked exceptions for recoverable conditions and runtime exceptions for programming errors

对可恢复的条件使用受检异常,对编程错误使用运行时异常

59. Avoid unnecessary use of checked exceptions

避免不必要地使用受检的异常

60. Favor the use of standard exceptions

尽量使用标准的异常

61. Throw exceptions appropriate to the abstraction

抛出与抽象相对应的异常

62. Document all exceptions thrown by each method

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

63. Include failure-capture information in detail messages

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

64. Strive for failure atomicity

努力使失败保持原子性

65. Don’t ignore exceptions

不要忽略异常

 

• Concurrency并发

66. Synchronize access to shared mutable data

同步访问共享的可变数据

67. Avoid excessive synchronization

避免过多同步

68. Prefer executors and tasks to threads

executor和task优先于线程

69. Prefer concurrency utilities to wait and notify

并发工具优先于wait和notify

70. Document thread safety

线程安全性的文档化

71. Use lazy initialization judiciously

慎用延迟初始化

72. Don’t depend on the thread scheduler

不要依赖于线程调度器

73. Avoid thread groups

避免使用线程组

 

• Serialization序列化

74. Implement Serializable judiciously

谨慎地实现serializable

75. Consider using a custom serialized form

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

76. Write readObject methods defensively

保护性地编写readobject方法

77. For instance control, prefer enum types to readResolve

对于实例控制,枚举类型优先于readResolve

78. Consider serialization proxies instead of serialized instances

考虑用序列化代理代替序列化实例

 

 

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    JAVA 加密算法(很好的算法,经典摘要)

    JAVA 加密算法(很好的算法,经典摘要)

    java源码包4

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    java源码包3

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    JAVA上百实例源码以及开源项目

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    JAVA上百实例源码以及开源项目源代码

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    java源码包2

    摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    JAVA上百实例源码以及开源项目源代码 java开源包2

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    Java 财务管理系统源码

    Java 财务管理系统源码 ...这样,它可以帮助他们保持记录最新且更高效。 从用户的角度来看,用户只需在该系统中开设一个账户即可。作为用户,他/她可以存入他们想要存入的金额。他们还可以提取资金。

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    java j2ee 课程设计报告

    Java建立在C语言和C++基础之上,但Java摒弃了C和C++中许多不合理的内容,它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布、和并发机制。用Java开发的应用软件在可移植性、健壮性、安全性等方面...

    java企业员工信息管理系统毕业设计(论文).pdf

    摘要 在当今社会,互联网空前的发展,给人们的工作和生活带来了极大的便利和高效,信息化,电子化己经成为节约运营成本,提高工作效率的首选。考虑到当前大量企业的企业员工管理尚处于手工作业阶段,不但效率低下,...

    java学习资源知识点整理

    摘要: 本资源包涵盖了Java知识、Linux和Windows等多个领域的内容和知识点,旨在帮助开发者全面提升技术水平。内容涵盖了Java基础语法、面向对象编程、异常处理、集合框架等核心知识点,同时也提供了Linux、Windows...

    Java管理系统源码项目

    Java管理系统源码 费用管理系统是一个 Java 项目,用于维护您的...这样,它可以帮助他们保持记录最新且更高效。 从用户的角度来看,用户只需在该系统中开设一个账户即可。作为用户,他/她可以存入他们想要存入的金额。

    Java聊天室的设计与实现socket 设计软件源码+WORD毕业论文文档.zip

    国内处于垄断的QQ,业界老大哥微软的MSN都是大众关注和使用的焦点,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,它是人们的生活变得十分的便利和高效,你能在网上找到自己想要...

Global site tag (gtag.js) - Google Analytics