调用对象方法的执行过程:
- 编译器查看调用对象的类型和方法名
- 编译器查看调用方法时提供的参数类型
- 如果是静态绑定方法(private、static、final),编译器可以直接确定下来
- 虚拟机调用x实际对象最适合那个类的方法
将方法或者类声明为final的意义:确保他们不会在子类中改变语义
在java中,只有基本类型不是对象,所有的数组都是Object类的子类。
只要对象与字符串通过+连接,就会自动调用对象的toString方法。
java可以在运行时确定数组大小:
自动装箱、自动拆箱-》编译器认可
JAVA反射:
获取类名:
1 Date date = new Date(); 2 Class class1 = date.getClass(); 3 System.out.println(class1.getName());
加载类:
Class class2 = Class.forName("java.util.Date");
创建实例(此处的newInstance方法只能调用无参构造方法):
1 Class class2 = Class.forName("java.util.Date"); 2 System.out.println(class2 == Date.class); 3 Date d = (Date) class2.newInstance();
已检查异常和未检查异常:
- 已检查异常编译器会进行检查,throws等等
- 未检查异常编译器不检查
继承设计的技巧:
- 将公共操作和域放在超类
- 不要使用protected
- 使用继承实现is a关系
- 除非所有继承的方法都有意义,否则不要使用继承
- 在覆盖方法时,不要改变预期的行为
- 使用多态而非类型信息
- 不要过多的使用反射