《java puzzlers》小结

1、每当要将一个byte序列转换成一个String时,你都在使用一个字符集,不管是否显式的指定了它。如果想让程序行为可预知,那么每次在使用字符集时都明确的指定它。

2、Java的重载解析过程是分两段运行的。第一阶段选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。如果一个方法或构造器可以接受传递给另个方法或构造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。解惑46

3、对静态方法的调用不存在任何动态的分派机制。解惑48

4、在final类型的静态域被初始化之前,存在着读取其值的可能性。解惑49

5、Instanceof操作符被定义为在其操作数为Null时返回false

6、无论何时,只要覆写了equals方法,你就必须同时覆写hashCode方法。

7、以0开头的整型字面量将被解释成为八进制数值。

8、不要在Lock方式锁住的块里调用wait、notify、notifyAll

9、当一个变量和一个类型具有相同的名字,并且他们位于相同的作用域时,变量名具有优先权。

10、一个包内私有的方法不能被位于另一个包中的某个方法直接覆写。

11、final修饰符对方法和域而言,意味着某些完全不同的事情。对于方法,final意味着该方法不能被覆写或者隐藏,对于域,final意味着该域不能被赋值超过一次。

12、一个覆写方法的访问修饰符所提供的访问权限与被覆写方法的访问修饰符所提供的访问权限相比,至少要一样多。

13、在java中,锁实际上是对象的公共属性 ,或许他们变为私有的会更有意义。一个对象实际上就是一个锁:你在对象本身上进行同步。如果每个对象都有一个锁,而且你可以通过调用一个访问器来获得他,这样或许更有意义。

14、加锁可以保证可见性与原子性,volatile变量只能保证可见性

15、除非你确实是需要一个外围实例,否则你应该优先使用静态成员类而不是非静态成员类。

16、为了确保子进程能够结束,你必须排空它的输出流,对于错误流也是一样。

17、在类的初始化期间等待某个后台线程很可能会造成死锁。

 

posted @ 2013-02-26 14:49  一宁  阅读(324)  评论(0编辑  收藏  举报