编写高质量代码 读书笔记

第一章

 

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 1   3元操作符的结果,会自动转型到最大类型:int转成long,long转成float


2 序列化:

   (1)  反序列化时,构造函数不会执行

   (2)  final变量,反序列化时会重新计算其值,

        但是这个"值"指的是基本类型,数组,字符串
        以下情况不会被重新赋值
          (1 通过构造函数为final变量赋值
          (2 通过方法返回值为final变量赋值
          (3 final修饰的属性不是基本类型

第二章

     1 用偶判断,不用奇判断
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
  
      (1) i%2 == 1 ? "奇数" : "偶数" :这样判断有问题,-1居然变成偶数了
   
           所以需要这样判断:i%2 == 0 ? "偶数" : "奇数"

第三章

      1 Java的静态方法不能复写,但是可以隐藏:
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
         因为静态方法属于前期绑定,复写属于后期绑定,所以静态方法不能复习


       2 内部类可以实现Java的多重继承:在外部类继承了其他类的前提下,内部类还可以继承一个类

第四章 字符串

    1 编码问题
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

   即使一个Java源文件是用gbk编码,生成的.class文件也会变成使用utf-8格式编码的unicode字符集.因为Java设计之初就采用unicode字符集设计class文件


第五章 :数组和集合

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 1 Arrays.copyOf():这个是浅拷贝

2 subList()方法

     1 subList方法返回的是 原列表的视图,所以对视图的修改动作直接作用于原列表

     2 生产子列表后,不可以再对原列表执行写操作,否则会抛异常

          (1) 生成的子列表只有一个时,可以对子列表执行写操作.
   
          (2) 生成的子列表多于一个时,则不可以对任何一个子列表执行写操作

3  Arrays.asList(): 此方法产生的list对象不可更改,比如对此对象进行add操作会抛异常
  
          (1)基本 类型数组不能作为asList方法的输入参数,这会导致逻辑混乱.建议采用基本类型的包装类型作为输入参数

                       原因:asList方法的入参是一个泛型变长数组,而基本类型不能泛型化,但是Java中数组是一个对象,可以泛化.这就导致整个入参作为变长数组的一个元素.


                       方法asList(T …a)
                       
                       int[] ints = new int[]{1,2,3};
                       List list = Arrays.asList(ints);// list的size=1. T表示int[]

                       Integer integers = new Integer[]{1,2,3};
                       List list = Arrays.asList(integers);//list的size=3,T表示Integer

4 Collections.shuffle():打乱列表顺序:用于抽奖程序等
                                              

5 hashMap中的元素,如果hashcode相同,那么查找效率就和arraylist类似,退化成了链表查找



第6章 枚举和注解


<!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 1 switch语句判断枚举类型,与以下代码相同:  switch(enumEg.ordinal()) , 所以如果枚举值为null,就会抛空指针异常

2 枚举的valueOf():返回和枚举项中字面值与参数相等的枚举项,如 果传入的参数不匹配,抛无效参数异常

一个枚举项的个数最好不要超过64个

  原因:因为Java会把一个不多于64个枚举项的枚举映射到了一个long类型的变量上,如果大于64个,则按照64个为一组拆分成多组,每组都映射到一个long类型上


 

你可能感兴趣的:(高质量代码)