1. 抽象类中不一定非得有抽象方法,就算没有抽象方法,编译也不会出错。
2、interface 继承 interface 用extends关键字。
3、在泛型中 E 实现一个接口用 extends关键字。
4、枚举类型也可以作为HashMap中的key使用
5、枚举类型也会被编译成class文件。命名格式和内部类相同。也可以被其他类调用,但也需要在前加上类名。
6、在定义多个不定参数的方法时候,不定参数必须在最后一个。
void go(int x, String... y){
}
7. Boolean.valueOf(String s) 该方法忽略大小写。
8. interface中不论是方法还是属性都默认为public,不能用其他可见性修饰符
9. 泛型中可以用super 如:List<? super String>
10. 直接取对象中的属性的时候 是从定义引用类型对象中取,而非实际的对象类型中取。
11. TreeSet 的subset中所有的操作都会反映到该Treeset中。TreeSet的subset的add方法的数值不能超出subset的范围。
12. 要序列化一个类的对象,该类和其所依赖的类都必须实现序列化接口。 但是如果父类已经实现了序列化接口,子类就无需实现序列化接口了。
13、 method(int... value) 和method(int x,int y)可以共存。
14、如果一个类没有定义任何构造器的话,默认会有一个无参构造器;但是当一个类定义了一个有参构造器的时候,并不会自动构造一个无参构造器;这样可能会引起需要无参构造器的子类编译出错。
15.可以在一个Thread的子类的构造方法中启动此线程。
16. try 后面可以不加catch。不过至少得有finally。
17.在反序列化过程中,将使用该类的公用或受保护的无参数构造方法初始化不可序列化类的字段。可序列化的子类必须能够访问无参数构造方法。可序列化子类的字段将从该流中恢复。 PS、如果超类未实现序列化接口。 那么在反序列化其子类的时候,会调用超类的无参构造器。
18. 在catch Exception时,超类的Exception要放在最后catch 否则会出错。
19. DateFormat 初始化一般用其下的getDateInstance方法。 把date转换成String 用 format方法,反之用parse方法。
20. 在某个类的成员方法内部也可以有一个非匿名的 内部类的声明。 编译后 class文件如 [类名]$1[内部类名]
21. run方法也可以用synchronized 修饰。
22. Arrays.sort(数组) 该数组如果是不同类的对象组成的 会出ClassCastException
23. public void takeList(List<? extends String> list){ list.add("123")} 出错 改成super 就可以了。
24. 非静态方法,同步用的是对象锁,如果是静态方法,同步是用的类锁。
25. 子类重写父类的方法时,其方法的返回值类型可以是父类该方法返回值类型的子类,而不能是父类。
26. 子类重写父类的静态方法时,不能使用super关键字。。PS:这其实不应该算是override。
27. 在构造中调用其他的构造方法只能用this 关键字。
28. case default 只能写在最后。
29. Arrays 类的 binarySearch(Object[] a, Object key) 使用二分搜索法来搜索指定数组. 调用前必须排序,否则结果不确定。 如果搜索不到该对象,会返回此值可插入位置的负值-1. 也就是排在此对象前的对象的索引的负值-1.
30.NumberFormat 的 SetMaximumFractionDigits等方法会四舍五入。
31. 一个对象的hashcode会被用作索引,此索引方便在相应的容器中快速定位到此对象。 如果有多个对象的hashcode相同,那么相当于一个索引对应多个对象。这样需要再次在这多个对象中线性查找出你想要找到的对象。
32. Console类只有readPassword方法返回的是char[]