2019-12-25
1.对象包装器与自动装箱
ArrayList<Integer> list = new ArrayList<>();
尖括号中的参数类型不允许为基本数据 类型,,也就是说不能写成ArrayList<int>,此时就用到Integer对象包装器类。
对象包装器类是不可变的,即一旦构造了包装器就不可改变包装在其中的值。同时对象包装器类还是final,因此不能定义它们的子类。
自动装箱:list.add(1);将自动变换成list.add(Integer.valueOf(1));这种变换称为自动装箱。
自动拆箱:int n = list,get(i);相当于int n = list.get(i).intValue();
装箱:将基本数据类型用相应的类包装器包装起来。int-->Integer
拆箱:将包装器类转化为相应的基本数据类型。Integer-->int
拆箱和装箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用,虚拟机只是执行这些字节码。
2.枚举类
在比较两个枚举类型的值时,永远不需要用equals,直接使用“==”即可。(equals实际上也是用的==)
//基本使用方式
public enum Size {
SMALL,MIDDLE,LARGE,WXTAR_LARGE;
}
//添加构造方法
public enum Size {
SMALL("S"),MIDDLE("M"),LARGE("L"),WXTAR_LARGE("XL");
private String size;
Size(String s) {
this.size = s;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
}
3.捕获异常
异常有两种类型:未检查异常和已检查异常。(运行时异常和编译时异常)
对于已检查异常,编译器将会检查是否提供了处理器。但是很多常见的异常都属于未检查异常(空指针),编译器不会查看是否为这些类 提供了处理器。
4.重载与重写
重载:同一个类里,方法名相同,参数列表不同,(返回类型可以不同,返回类型不可作为方向重载的必要条件)
重写:主要发生在继承里,将父类的方法进行扩展。