基础知识
char
char可使用unicode编码表示。
数值运算
浮点优先,自动上转,int打底。
基本数据类型包装器
类内部存储数据的属性为final,只能赋值一次,可自动装箱、拆箱,每次装箱都相当于新建一个对象。
数组
与其说是数组,不如说是引用集。
数组和类一样可以上下转。
泛型
ArrayList<sub> 和 ArrayList<sup> 没有继承关系,
要判断是否有继承关系,用<? extends class><? super class>.
<T>就只是一个类型检查,内部都是Object。
日期类
日期字母大小写
一般24小时制应使用yyyy-MM-dd HH-mm-ss
关于日期格式你必须知道的坑( yyyy-MM-dd HH:mm:ss SSS)
Calendar类时间
月份从0起算,获取的月份比实际月份少一
以周日为一周开始,获取的 某天是周中第几天 比实际多一
设置月份同时要设置日期为1,否则在某月的31日或二月会出现月份加一的情况
JAVA Calendar设置时间,月份总是加1_空白-键的博客
// 设置月份
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, 1); //!!!
类
块
不能像类和方法一样在两个相同的块中声明相同的变量。
final
不是说指向的对象的域不可变,是只能赋一次值(为null时为未赋值),即只能指向一个引用,只要引用不变就行。
static
所用这个类的实例都有同一个引用,这个引用指向一个存在的域。
静态方法不能被重写
super
与this不同,super不是一个对象的引用,它只是一个指示编译器调用超类方法的特殊关键字。
构造器的坑
每个类都默认有一个没有参数和方法体的构造器,如果声明了一个构造器,将不再提供默认构造器。
每次调用构造器(新建对象)都要调用父类构造器,如果没有显示调用父类构造器,将调用默认(没有参数的)构造器,如果没有显示构造器,且没有 没有参数的构造器 ,会出现错误。
参数数量可变方法
public void method(Object... args){
Object[] objects= Arrays.stream(args).toArray();
}
接口
默认方法作用域应该和public相同,不同包中的实例可调用默认方法。
方法冲突
1. 超类优先
如果一个类继承一个类,实现了n个接口,超类中的方法和某几个接口中的默认方法 方法名、参数类型相同,则默认继承超类方法,忽略接口中方法。
2.接口冲突
如果有两个接口中都有一个方法名、参数类型相同的方法,这两个方法中至少有一个方法是默认方法,则必须覆盖这个方法来解决冲突。