effective java

78条,每天更两条,有空会补充我自己的理解。

 38、检查参数有效性

      定义方法时控制参数的类型限制。

     public static void sort(long a[], int offset,int length){
        assert a !=null;
        assert offset >=0 && offset<=a.length;
        assert length >= 0 && length <= a.length-offset;
        //do the computaion
     }

  39、必要时进行保护性拷贝

         如果类具有从客户端得到或者返回到客户端的可变组件,类就必须保护性地拷贝这些组件。

  40、谨慎设计方法签名

        方法的名称、不要过于追求便捷、避免过长的参数列表(4个)、一个参数的方法比较推荐、对象替代多个参数、接口替代类为参数。

        方法的正交性 orthogonality

  41、慎用重载

        覆盖、编译期与运行期间的依赖,传递同样的参数,所有重载的方法的行为保持一致。

 

  42、可变参数

        可变数组?  Arrays.toString 

  43、返回零长度的数组或者集合,而不是null.

        使用方不用做非null验证,去除不必要的处理。

 

  44、api文档化(javadoc)

    

  45、将局部变量的作用域最小化。

       for(int x=0;n=list.size();x<n;x++){

         dosomething(x);  

       }

 

   46、 foreach 替代传统的for循环

           以下三种不考虑使用foreach 过滤、转换、平行迭代

           关键词,迭代器和索引变量

   48、 如果需要精确的答案,请避免使用float和double

          int<long<Bigdecmal

 

   49、基本类型优先于装箱基本类型

          类型系统 primitive、reference type 、boxed primitiveji

          两者区别 

          1、值 同一性 2、null 3、效率

                if(i == 42)

    50、选择使用合适的类型,来尽量避免使用字符串

         threadlocal

         public static void  get(String key);

 

    51、当心字符串拼接的性能

          85 StringBuilder  不可变 平方级

    52、参数类型-通过接口引用对象

          List <Sting> list = new ArrayList<String>();

          值类、框架、不存在的额外方法 

 

    53、接口优先于反射机制

           编译时期未知的类,访问对象时已知的某个接口或者类。

           性能差两倍、代码量多、缺少编译时检查的优势

     54、谨慎使用本地方法 JNI (java native interface)

             本地程序设计语言(c/c++)、JVM、biginteger

     

     55、谨慎地进行优化 

            好代码,有效率的代码。

            api、链路层、永久数据格式

      56、遵守普遍接受的命名惯例

           the java langrage specification

 

      57、 只针对异常的情况才使用异常

         try{

             int x=0;

             while(true){

                arr[x++].climb();

          }

   }catch(exception e) {

 

       }

        jvm优化、异常模式、堆栈轨迹的完整性、api设计、hasNext()

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

               可抛出结构、

               受检的异常-简单说是需要try的异常、

               运行时异常 前提违例-数组角标越界。

       RuntimeException和它的子类以及Error和它的子类都是非受检异常

              参考资料:http://blog.csdn.net/p106786860/article/details/11918773

 

        59、避免不必要地使用受检的异常。

              

        60、优先使用标准的异常

            nullpointexception、indexoutofboundsexception 

            内存印迹,装载类的时间开销

        61、抛出与抽象相对应的异常

              高层实现与低层异常,

              异常转译:更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。

             try{

                   return i.next();      

              }catch(nosuchelementException e){

                   Throw new indexofoutofException();

            }

            异常链:低层的异常传递到高层,高层的异常提供访问方法。

          62、每个方法抛出的异常都要有文档

              @throws

 

          63、在细节消息中包含能捕获失败的信息

                硬数据、描述性数据

          64、努力使失败保持原子性

                对象的原子性

                  1、不可变的对象

                  2、检查参数的有效性

                  3、 调整计算处理过程的熟悉,任何会失败的都在对象状态被修改之前。

          

           65、不要忽略异常

                  1、catch 里面什么都不做

         2、 关闭FileInputStream 

                  什么都不做类似关掉火警信号

            3、用enum替代int常量

 

posted on 2017-02-20 12:34  天气预报员  阅读(89)  评论(0)    收藏  举报