C.1 I/O
C.1.1 Stream.close可以抛出IOException异常
规则:要在close上捕获异常,并且一般做法是忽略这些异常。
C.1.2 PrintStream.write(int)不刷新输出流
规则:要避免使用PrintStream.write(int)。如果用它,需要调用flush。
C.1.3 要消费掉一个进程的输出,否者该进程可能挂起
规则:应该总是消费掉你所创建的进程的输出。
C.2 线程
C.2.1 调用Thread.run不能启动一个线程
规则:永远不要调用Thread.run。
C.2.2 库类可能锁住或通知它们的实例
规则:如果你在扩展一个库类,那么请不要使用实例锁。应该使用存储在一个
私有域中的单独的锁对象。
C.2.3 Thread.interrupted会清除中断状态
规则:不要使用Thread.interrupted,除非你想清除当前线程的中断状态。
C.2.4 类初始化过程中将持有该类的锁
规则:要避免死锁风险,永远不要在类初始化过程中等待一个后台线程。[JSL 12.4.2]
C.2.5 在共享可变状态时同步失败,可能导致不能观察状态的变化
规则:要同步对共享的可变状态的访问。[EJ Item 48]
C.2.6 在被同步的语句块中调用外部方法可能导致死锁
规则:永远不要将控制流让给在被同步的方法或语句块中调用的外部方法。[EJ Item 49]
C.2.7 在while循环的外部调用wait方法会引发不可预知的行为
规则:永远不要在一个while循环的外部去调用wait。[EJ Item 50]
C.2.8 对线程调度器的依赖可能导致不定的且平台依赖的行为
规则:为了编写健壮的、响应迅速的和可移植的多线程程序,应该确保在任何给定的时刻,
都只有极少数的线程是可运行的。[EJ Item 51]
C.3 反射
C.3.1 反射将检查对实体和实体所属类的访问权限
规则:用反射实例化类,用接口访问实例。
C.3.2 用反射实例化内部类需要一个额外的参数
规则:不要在内部类上使用反射
优先考虑使用静态成员类,而不是内部类
C.3.3 Class.newInstance可以抛出未声明的受检查异常
规则只要存在构造器会抛出受检查异常的任何可能性,那么就应该使用java.lang.reflect.
Constructor.newInstance而不是Class.newInstance
C.4 序列化
C.4.1 让一个类可序列化将引入一个公共的伪构造器
规则:在让一个类可序列化前,三思
在接受缺省的readObject方法之前,要三思
编写readObject方法时,要采取保护性措施
C.4.2 序列化形式是类得公共API的一部分
规则:在设计序列化形式时,应该与设计任何其他API一样小心仔细。
C.4.3 使用缺省的序列化形式会在类得公共API中泄露私有域
规则:应该考虑使用某种定制的序列化形式
C.4.4 使用缺省的序列化形式可能会导致性能低下
规则:应该考虑使用某种定制的序列化形式
C.4.5 维护实例控制的不变规则需要一个readResolve方法
规则:应该总是为单例、自编的类型安全的枚举类型以及其他实例控制的
可实例化的类编写一个readResolve方法。
C.4.6 声明序列版本UID失败会导致脆弱
规则:应该在可序列化的类中声明一个显式的序列版本UID。
C.4.7 如果readObject或readResolve调用了可覆写的方法,反序列化循环的对象图可能引发奔溃
规则:如果一个HashSet、HashMap或HashTable将被序列化,那么确保其内容不会返回引用它;
在readObject和readResolve方法中,要避免在当前正在被序列化的对象上调用方法。
如果无法听从建议,那么要确保对象图不会有任何问题的循环。
C.5 其他库
C.5.1 覆写equals方法而不覆写hashCode方法可能会引发不定的行为
规则:总是要一起覆写。
C.5.2 Calendar和Date设计得很差劲
规则:一定要参考API。
C.5.3 许多类不管方法名是什么,这些类都是不可变的
规则:不要被误导而认为不可变的类型是可变的。不可变的类型包括
String Integer Long Short Byte Character Boolean Float Double BigInteger BigDecimal
C.5.4 某些被弃用的方法对程序员来说就是毒药
规则:弃用的方法 Thread.stop Thread.suspend Runtime.runFinalizerOnExit System.runFinalizerOnExit
C.5.5 使用自编的解决方案而不是库容易导致努力白费、bug产生以及极差的性能
规则:要了解并使用库。
分享到:
相关推荐
-- the URL to watch for PGTIOU/PGT responses from the CAS server --> <init-param> <param-name>allowedProxyChains</param-name> <param-value>http://www.testd.com:8080/testd</param-value> ...
张孝祥java高级-> 张孝祥javascript视频教程-> 俄罗斯方块视频教程-> 贪吃蛇游戏项目实战-> 张孝祥javaweb视频教程-> 张孝祥java邮件开发视频-> 传智播客Struts视频教程-> 传智播客hibernate视频教程-> 传智播客...
fckeditor-java-core-2.4.jar <servlet> <servlet-name>Connector</servlet-name> <servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class> <load-on-startup>1</load-on-startup> ...
监控器需要的jar,需在web.xml中配置<filter> <filter-name>monitoring</filter-name> <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> </filter> <filter-mapping> <filter-name>...
张孝祥java高级-> 张孝祥javascript视频教程-> 俄罗斯方块视频教程-> 贪吃蛇游戏项目实战-> 张孝祥javaweb视频教程-> 张孝祥java邮件开发视频-> 传智播客Struts视频教程-> 传智播客hibernate视频教程-> 传智播客...
05 java面试——杭州-蚂蚁金服-Java高级.pdf 06 java面试——杭州-蚂蚁金服-资深工程师.pdf 07 java面试——南京-软通动力-Java中级.pdf 08 java面试——厦门-中软国际-Java中级.pdf 09 java面试——上海-拼多多-...
总的来说,JavaCV 1.3提供了一个跨平台的解决方案,将计算机视觉、音频视频处理的强大功能与Java的易用性相结合,大大降低了开发复杂视觉应用的门槛。通过这个`javacv-platform-1.3-bin.zip`压缩包,你可以快速地在...
-- PageOffice Begin --> <servlet> <servlet-name>poserver</servlet-name> <servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class> </servlet> <servlet-mapping> <servlet-name>po...
在本资源中,我们关注的是C、Java和Python这三种流行的编程语言的BNF范式。 首先,让我们详细探讨C语言的BNF范式。C语言的语法严谨且层次分明,它的BNF范式主要涵盖了程序的基本组成部分,如声明(declarations)、...
-> 创建消息 -> 发送消息 -> 接收消息 -> 读取消息 为什么要使用消息 理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到一个agent ,B作为接受者去agent上获取消息。但是A,B不需要同时到agent上去...
将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysql-connector-java-5.1.30-bin.jar 配置 在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该...
Java是一种广泛使用的面向对象的编程语言,以其平台独立性、安全性、健壮性和高性能而闻名。这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java...
JAVA程序员必读--基础篇.chm
<artifactId>aliyun-java-sdk-core</artifactId> <version>3.2.2</version> </dependency> 如此引用即可,更多关于阿里云短信发送相关请参考http://blog.csdn.net/niaoer2010/article/details/78036664
此电脑->右键->属性->高级系统设置->环境变量: 1、「用户变量」和「系统变量」分别新建2条变量 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 变量名:JAVA_HOME 变量值:C:\...
"eclipse-java-indigo-SR2-win32" 版本是针对Windows 32位系统的Eclipse IDE的一个特定构建,它属于Eclipse Indigo Service Release 2(SR2)。Indigo是Eclipse的第3.7版本,发布于2011年,它带来了许多新特性和改进...
Java interview-高级Java面试题2019_java-interview.zip
此版本是"ckeditor-java-core-3.5.3",专门针对Java平台进行了优化,允许开发者在Java应用程序中集成CKEditor的功能。 1. **CKEditor简介** CKEditor是一款基于JavaScript的WYSIWYG(所见即所得)文本编辑器,最初...
根据提供的文件信息,“Java语言程序设计-基础篇(原书第8版)”这本书主要面向初学者,旨在通过详细的讲解和示例帮助读者掌握Java编程的基础知识。以下是对该书籍可能涉及的一些关键知识点进行的总结: ### 1. Java...