super 与this:super不是一个对象的引用,不能将super赋给另一个对象变量,只是一个指示编译器调用超类方法的特殊关键字
this用途:一、引用隐式参数。二调用该类的其他构造器
super用途:一、调用超类的方法。二调用超类构造器
使用super调用构造器的语句必须是子类构造器的第一条语句。
this 也 作为第一条
Manager[] managers = new Manager[10];
Employee[] staff = managers; // OK
staff[0] = new Employee("Harry Hacker", ...);
在调用方法时可能 ArrayStoreException.
对象变量是多态的
动态绑定(重载解析,在所有方法中找,没找到或者经类型转换有多个,报错)
覆盖方法时,允许返回类型是原返回类型 子类型,访问权限不能低于原权限
将类声明为final ,其中的方法自动成为final,但不包括域
final 方法,子类不能覆盖(可用于优化,内联)
虚拟机在此也做了优化。检测继承中是否真正覆盖
does not generate an exception if x is null. It simply returns false.
类即使不含抽象方法,也可声明为abstract ,禁止这个类实例化
protected :对本包和所有子类可见
基本类型不是对象!
数组扩展于Object
使用util包中的Objects.equals(a,b)判断是否相同,都为null,相同
java语言规范要求equals方法具有下面特性:
- 自反性
- 对称性
- 传递性
- 一致性
- 对于任意非空引用x,x.equals(null)应该返回false
如果子类能够拥有自己的相等概念,则对称性需求将强制采用getClass进行检测
如果由超类决定相等的概念,就可以使用instanceof 进行检测
equals 方法应该与hashCode方法一致。
5.3泛型数组列表
ArrayList,在添加或删除元素时,具有自动调节数组容量的功能。
ArrayList<Employee> list = new ArrayList<>(100); // capacity 100, size 0
list.set(0, x); // no element 0 yet
5.4 对象包装器与自动装箱
对象包装器类 是 final类;
如果想修改参数值的方法,借助于org.omg.CORBA包中的类型 *Holder
5.5 参数数量可变的方法
5.6 枚举类型
所有枚举类型都是Enum类的子类。
在枚举类型中可以有构造器,方法,域
5.7 反射
运行时类信息
获得类对象:
- Date d =new Date(); Class c=d.getClass();
- Class c= Class.forName("java.util.Date")
- d.class
java.lang.reflect.Constructor 1.1
• Object newInstance(Object[] args)
AccessibleObject.setAccessible(fields, true);
java.lang.reflect包中的Array类允许动态创建数组。
要得到数组元素类型
int [] i={1,2,3}
i.getClass() //返回[ I
判断是否为数组
获得元素类型:i.getClass() .getComponentType();
int[] 可以转换为Object 但不能转换为对象数组
public static Object goodCopyOf(Object a, int newLength)
{
<span style="white-space:pre"> </span>Class cl = a.getClass();
<span style="white-space:pre"> </span>if (!cl.isArray()) return null;
<span style="white-space:pre"> </span>Class componentType = cl.getComponentType();
<span style="white-space:pre"> </span>int length = Array.getLength(a);
<span style="white-space:pre"> </span>Object newArray = Array.newInstance(componentType, newLength);
<span style="white-space:pre"> </span>System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength));
<span style="white-space:pre"> </span>return newArray;
}
java.lang.reflect.Method 1.1
• public Object invoke(Object implicitParameter, Object[] explicitParameters)