反射j2ee08

一、什么是反射

反射是java语言的一种机制,利用反射机制动态的实例化对象(构造函数)、读写属性、调用方法。

反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)

二、类类

所有狗 狗类 Dog 狗对象 二哈

   所有猫      猫类 Cat                 猫对象  肥波
  
   所有类      类类 java.lang.Class     类对象 特定类

三、如何得到类对象?

 一切反射相关的代码都从获得类对象开始

3种获取方式:
     2.1 类名.class;


     2.2 对象名.getClass();


     2.3 Class.forName(全限定名/全路径名)(最常用)

 

 4.根据类得到类名(全限定名/全路径名)


    1)cName.getName();            -->获取全限定名
    2)cName.getSimpleName();         -->获取类名
    3)cName.getPackage();             -->获取包名

效果如下:

5.根据类得到类的属性
    Field field=cla.getField(“属性名”);

    field.getName();            -->获取属性名            
    filed.getType();            -->获取属性类型        
    field.getModifiers();            -->获取属性访问修饰符    
    field.set(Object,Object);         -->设置属性值,参数1:要设置属性所在对象;参数2:要设置的值;    
    field.get(Object);            -->获取属性值,参数:要获取属性值的对象                
    clazz.getDeclaredField(“属性名”);    -->获取单个属性(私有、公有、受保护、默认、静态)    
    clazz.getDeclaredFields();        -->获取所有属性(私有、公有、受保护、默认、静态)

6.根据类得到类的方法


    //无参无返回、无参有返回、有参无返回、有参有返回
    cla.getMethod();            -->获取单个公有方法
    cla.getDeclaredMethod();        -->获取当个方法(包括私有、受保护、默认、公有)
    cla.getMethods();            -->获取所有公有方法
    cla.getDeclaredMethods();        -->获取所有的方法(包括私有、受保护、默认、公有)

7.根据类得到类的构造方法


    cla.getConstrutor();            -->获取单个公有构造方法
    cla.getDeclaredConstrutor();        -->获取单个构造方法(包括私有、受保护、默认、公有)
    cla.getConstrutors();            -->获取所有的公有构造方法
    cla.getDeclaredConstrutors();        -->获取所有的构造方法(包括私有、受保护、默认、公有)

8.根据类得到类的实现接口列表
    Class[] interface=cla.getInterfaces();    -->获取类对象中所有实现接口列表
 

 

 

(补充)

反射的好处

1.增加程序的灵活性,避免将程序写死到代码里。

例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要改而且不容易定位,如果你在编写之前先将接口与实现类的写在配置文件里,下次只需改配置文件,利用反射(java API已经封装好了,直接用就可以用 Class.newInstance())就可完成。

2.代码简洁,提高代码的复用率,外部调用方便
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值