Item85:PreferalternativestoJavaserialization优先选择java序列化的备用方法尽管Java提供了序列化功能,但是却存在潜在的风险和性能问题。Java的序列化是通过执行readObject方法来执行反序列化,这个方法可以初始化classpath下的任何实现了s
Item78:Synchronizeaccesstosharedmutabledata共享可变数据需要同步synchronized关键字可以保证同时只有一个线程可以执行或者阻塞该方法;除了long和double之外,Java语言特性都能保证对变量的读写操作是原子的;long和double读写要实现原
Item69:Useexceptionsonlyforexceptionalconditions只在异常情况下使用异常//Horribleabuseofexceptions.Don'teverdothis!try{inti=0;while(true)range[i++].climb();}catch
Item57:Minimizethescopeoflocalvariables最小化局部变量的作用域在使用的地方声明局部变量,过早的声明会导致代码块过早开始过晚结束;让方法保持精简,集中于某一些逻辑,如果方法太大分成两个方法;使用for循环而不是使用while循环;声明局部变量时便初始化。同时偏向于
Item49:Checkparametersforvalidity检查参数合法性在方法或者是构造器的开始部分作必要的参数合法性检查,可以使用Objects.requireNonNull或者是断言,断言的一个好处是如果没有开启断言的话对代码是没有任何侵入的;前者的好处是可以自定义错误信息。同时在方法上
Item 42 : Prefer lambdas to anonymous classes使用lambda表达式来代替匿名类Collections.sort(words, new Comparator<String>() { public int compare(String s1
Item34:Useenumsinsteadofintconstants使用枚举来代替整型常量枚举类型添加以前使用常量的方式来满足使用需要,但是这种方式有很多缺点:无法保证类型安全,并且没有没有表现力(不够优雅)。常量是跟随调用者编译的,如果常量改变了但是调用者没有重新编译那么会出现问题不利于deb
Item26:Don’tuserawtypes不要使用原始类型(没有类型声明的泛型)因为编译器无法知道你的一个集合装的是什么,比如下面的代码:privateListlist=newArrayList();publicvoidaddE(Objecto){list.add(o);//gotaunchec