反射:反射的定义

1.引出反射

问题1:
1.对象有编译类型和运行类型
          Object    obj  =  new java.util.Date();
    编译类型:  Object
    运行类型:  java.util.Date
   需求:通过obj对象,调用java.util.Date类中的toLocaleString方法.
   obj.toLocaleString();  此时编译报错, 编译时,会检查该编译类型中是否存在toLocaleString方法.
                                          如果存在,编译成功,否则编译失败.
   解决方案,因为obj的真实类型是java.util.Date类,所以我们可以把obj对象强制转换为java.util.Date类型.
   java.util.Date d = (java.util.Date)obj;
   d.toLocaleString();//调用成功
   如果不知道obj的真实类型,就不能强转.(底层有一个方法,返回一个Object类型的java.util.Date对象).
   此时问题如何解决?

问题2:
  在面向对象中提及到,一切事物都可以看成是对象,那么问题来了,类这种事物是啥对象呢?
 又使用什么类来表示类这种对象呢?


2.反射的定义

a. JAVA反射机制是在运行状态中,
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
b.反射技术
条件:运行状态
已知:一个类或一个对象(根本是已知.class文件)
结果:得到这个类或对象的所有方法和属性
 注: 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。

解决问题1
@Test
public void testObj() throws Exception {
	Object object  = new Date();
	Method method = object.getClass().getMethod("toLocaleString");
	Object d = method.invoke(object);
	System.out.println(d);		
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值