69.反射-引出反射和什么是反射

引出反射

问题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对象(字节码对象)

反射

反射:得到类的元数据过程,在运行时期,动态的去获取某一个类中的成员信息(构造器,方法,字段,内部类,接口,父类等等)

注意:反射很强悍,但是损耗性能






你可能感兴趣的:(69.反射-引出反射和什么是反射)