Skip to main content

Recently Updated Pages

79. 避免过度同步

Effective Java 第十一章 并发

  第 78 条告诫过我们缺少同步的危险性。本条目则关注相反的问题。依据情况的不同,过度同步则可能导致性能降低、死锁,甚至不确定的行为。   为了避免活性失败和安全性失败,在一个被同步的方法或者...

Updated 2 years ago by wandersky

78. 同步访问共享的可变数据

Effective Java 第十一章 并发

  关键字 synchronized 可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。许多程序员把同步的概念仅仅理解为一种互斥( mutual exclusion )的方式...

Updated 2 years ago by wandersky

77. 不要忽略异常

Effective Java 第十章 异常

  尽管这条建议看上去是显而易见的,但是它却常常被违反,因而值得再次提出来。当 API 的设计者声明一个方法将抛出某个异常的时候,他们等于正在试图说明某些事情。所以,请不要忽略它!要忽略一个异常...

Updated 2 years ago by wandersky

76. 保持失败原子性

Effective Java 第十章 异常

  当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中, 即使失败是发生在执行某个操作的过程中间。对于受检异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一...

Updated 2 years ago by wandersky

75. 在细节消息中包含失败一捕获信息

Effective Java 第十章 异常

  当程序由于未被捕获的异常而失败的时’候,系统会自动地打印出该异常的堆栈轨迹。在堆栈轨迹中包含该异常的字符串表示法 (string representation),即它的 toString 方...

Updated 2 years ago by wandersky

74. 每个方法抛出的异常都需要创建文档

Effective Java 第十章 异常

  描述一个方法所抛出的异常,是正确使用这个方法时所需文档的重要组成部分。因此,花点时间仔细地为每个方法抛出的异常建立文档是特别重要的。   始终要单独地声明受检异常, 并且利用 Javadoc...

Updated 2 years ago by wandersky

73. 抛出与抽象对应的异常

Effective Java 第十章 异常

  如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形将会使人不知所措。当方法传递由低层抽象抛出的异常时,往往会发生这种情况。除了使人感到困惑之外,这也“污染”了具有实现细节的更高层的 ...

Updated 2 years ago by wandersky

72. 优先使用标准的异常

Effective Java 第十章 异常

  专家级程序员与缺乏经验的程序员一个最主要的区别在于,专家追求并且通常也能够实现高度的代码重用。代码重用是值得提倡的,这是一条通用的规则,异常也不例外。Java 平台类库提供了一组基本的未受检...

Updated 2 years ago by wandersky

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

Effective Java 第十章 异常

  Java 程序员不喜欢受检异常,但是如果使用得当,它们可以改善 API 和程序。不返回码和未受检异常的是,它们强迫程序员处理异常的条件,大大增强了可靠性。也就是说,过分使用受检异常会使 AP...

Updated 2 years ago by wandersky

70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常

Effective Java 第十章 异常

  Java 程序设计语言提供了三种 throwable:受检异常(checked exceptions)、运行时异常(runtime exceptions)和错误(errors)。程序员中存在...

Updated 2 years ago by wandersky

69. 只针对异常的情况下才使用异常

Effective Java 第十章 异常

  假如你某一天不走运的话,可能遇到如下代码: /* Horrible abuse of exceptions. Don't ever do this! */ try { int i =...

Updated 2 years ago by wandersky

68. 遵守被广泛认可的命名约定

Effective Java 第九章 通用程序设计

  Java 平台有一组完善的命名约定,其中许多约定包含在《The Java Language Specification》[JLS, 6.1]。不严格地讲,命名约定分为两类:排版和语法。   ...

Updated 2 years ago by wandersky

67. 明智审慎地进行优化

Effective Java 第九章 通用程序设计

  有三条关于优化的格言是每个人都应该知道的: 比起任何其他单一原因(包括盲目愚蠢),计算上的过失更多的是以效率为名(不一定能实现)而犯下的。 ​ ...

Updated 2 years ago by wandersky

66. 明智审慎地本地方法

Effective Java 第九章 通用程序设计

  Java 本地接口(JNI)允许 Java 程序调用本地方法,这些方法是用 C 或 C++ 等本地编程语言编写的。从历史上看,本地方法主要有三种用途。它们提供对特定于平台的设施(如注册中心)...

Updated 2 years ago by wandersky

65. 接口优于反射

Effective Java 第九章 通用程序设计

  核心反射机制 java.lang.reflect 提供对任意类的编程访问。给定一个 Class 对象,你可以获得 Constructor、Method 和 Field 实例,分别代表了该 C...

Updated 2 years ago by wandersky

64. 通过接口引用对象

Effective Java 第九章 通用程序设计

  条目 51 指出,应该使用接口而不是类作为参数类型。更一般地说,你应该优先使用接口而不是类来引用对象。如果存在合适的接口类型,那么应该使用接口类型声明参数、返回值、变量和字段。 惟一真正需...

Updated 2 years ago by wandersky

63. 当心字符串连接引起的性能问题

Effective Java 第九章 通用程序设计

  字符串连接操作符 (+) 是将几个字符串组合成一个字符串的简便方法。对于生成单行输出或构造一个小的、固定大小的对象的字符串表示形式,它是可以的,但是它不能伸缩。使用 字符串串联运算符重复串联...

Updated 2 years ago by wandersky

62. 当使用其他类型更合适时应避免使用字符串

Effective Java 第九章 通用程序设计

  字符串被设计用来表示文本,它们在这方面做得很好。因为字符串是如此常见,并且受到 Java 的良好支持,所以很自然地会将字符串用于其他目的,而不是它们适用的场景。本条目讨论了一些不应该使用字符...

Updated 2 years ago by wandersky

61. 基本数据类型优于包装类

Effective Java 第九章 通用程序设计

  Java 有一个由两部分组成的类型系统,包括基本类型(如 int、double 和 boolean)和引用类型(如 String 和 List)。每个基本类型都有一个对应的引用类型,称为包装...

Updated 2 years ago by wandersky

60. 若需要精确答案就应避免使用 float 和 double 类型

Effective Java 第九章 通用程序设计

  float 和 double 类型主要用于科学计算和工程计算。它们执行二进制浮点运算,该算法经过精心设计,能够在很大范围内快速提供精确的近似值。但是,它们不能提供准确的结果,也不应该在需要精...

Updated 2 years ago by wandersky