第1部分 语法 1
Item 1:什么时候“被覆盖的”方法并非真的被覆盖了 2
Item 2:String.equals()方法与“?”运算符的用法比较 5
Item 3:Java 是强类型语言 8
Item 4:那是构造函数吗 12
Item 5:不能访问被覆盖的方法 14
Item 6:避免落入“隐藏变量成员”的陷阱 17
Item 7:提前引用 25
Item 8:设计可继承的构造函数 26
Item 9:通过引用传递基本类型 33
Item 10:布尔运算符与“短路”运算符 36
第2部分 语言支持 39
Item 11:使用SoftReference 对象回收引用 40
Item 12:在同步方法中调用同步方法导致死锁 50
Item 13:正确地克隆对象 60
Item 14:覆盖equals 方法 66
Item 15:避免使用构造函数来实现clone() 70
Item 16:反射、接口与匿名类的方法调用 75
Item 17:异常处理和OutOfMemoryJError 85
第3部分 工具与集合 91
Item 18:有序的属性键 92
Item 19:使用缓存和持久存储机制处理偶发性超大集合 96
Item 20:使用属性文件还是ResourceBoundle 108
Item 21:属性对象的缺陷 111
Item 22:使用集合中新的API而不是旧的API 117
第4部分 输入与输出 121
Item 23:序列化 122
Item 24:Unicode、UTF和流 126
Item 25:通过套接字发送序列化对象 132
Item 26:Try、Catch…Finally 135
Item 27:刷新图像资源 139
第5部分 GUI的显示 145
Item 28:提供进度反馈 146
Item 29:用repaint()替代validate()来重新布局组件 152
Item 30:Z-Order与重叠的组件 156
Item 31:解决Validate、Revalidate、Invalidate的迷题 164
Item 32:垂直排列组件 168
Item 33:如何恰当地使用GridBagLayout 178
Item 34:避免闪烁 186
Item 35:带有嵌入的HTML的组件 192
第6部分 GUI的控制 197
Item 36:更高的数据有效性 198
Item 37:根据应用程序状态降低GUI组件的敏感性 209
Item 38:在事件处理器中使用线程,以避免冻结图形用户界面 216
Item 39:模型、视图、控制器和JTree 224
Item 40:数据转移非文本数据 227
Item 41:KeyListener没有监听吗 250
Item 42:打印JEditorPane中的文本、超文本和图像 254
第7部分 性能 265
Item 43:延迟装载以获取更好的性能 266
Item 44:对大量创建的对象使用对象池 269
Item 45:性能对比:数组与矢量 274
Item 46:对于动态增长的数组避免使用临时数组 280
Item 47:对于循环体内部的字符串连接,使用StringBuffer而非“+” 286
第8部分 杂项 289
Item 48:有没有一个更好的调试方法 290
Item 49:用接口封装JNI调用 292
Item 50:断言 307
索引 315