引出反射
问题1:
1.对象有编译类型和运行类型
Object obj = new java.util.Date();
编译类型:Object
运行类型:java.util.Date
需求:
通过obj对象,调用java.util.Date类中 的toLocaleString方法.
obj.toLocaleString();此时编译报错,编译时,会及检查该编译类型中是否存在toLocalString方法.
如果存在,编译成功,否则编译失败.
解决方案:
因为obj真实类型是java.util.Date类,所以我们可以把obj对象强制转换为java.util.Date类型.
java.util.Date d = (java.util.Date)obj;
d.toLocalString();//调用成功
如果不知道obj的真实类型,就不能强转,(底层有一个方法,返回一个Object类型的java.util.Date对象).
此时问题如何解决?
使用反射
问题2:
在Java中号称一切事物都可以看做为对象,那么类是什么对象?又使用什么类来表示这种对象?
类一旦加载进内存,就会变成Class对象(字节码对象)
反射
反射:得到类的元数据过程,在运行时期,动态的去获取某一个类中的成员信息(构造器,方法,字段,内部类,接口,父类等等)
注意:反射很强悍,但是损耗性能