第一章
<!--?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():返回和枚举项中字面值与参数相等的枚举项,如
果传入的参数不匹配,抛无效参数异常
3
一个枚举项的个数最好不要超过64个
原因:因为Java会把一个不多于64个枚举项的枚举映射到了一个long类型的变量上,如果大于64个,则按照64个为一组拆分成多组,每组都映射到一个long类型上