Java反射机制

Reflection 是 Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时通过 Reflection APIs 取得任何一个已知名称的 class 的内部信息,包括其 modifiers(诸如 public, static 等等)、superclass(例如 Object)、实现的 interfaces,也包括 fields 和 methods 的所有 信息,并可于运行时改变 fields内容或调用 Constructor,methods。

上面的看不懂,我们来看下面的:

  1. 什么是反射:根据我的理解,反射应该是再运行的状态下,可以知道任意一个类所继承的接口,共有的方法,方法的个数,以及每个方法的参数类型,方法的类型,动态地调用运行。
  2. 我们上一篇说了动态的绑定,其实对于动态的理解,大概会是这样定义“在程序运行的时候,允许改变程序结构或者变量类型,这样的语言一般会被我们成为动态的语言。”,虽然java不是动态语言,但是java有着动态相关机制,即Reflection 。
  3. 具体来说会有两个特征:一是java可以在运行的时候才知道类的名字,那就会在编译的时候未知类的名字;二是在运行的时候对fileds设值,或者唤起methods。

下面来介绍一下这个重要的java.lang.reflect包。

java.lang.reflect:提供接口与类,用来获取类和对象的反射信息
主要有一下这些类

  1. Class类:是反射的核心类,可供获取类名,它是java.lang包下的;
   public String getName() {
        String name = this.name;
        if (name == null)
            this.name = name = getName0();
        return name;
    }
   如: Class<?> c = Class.forName("com.chan.ref0122.BWM");

2.Field类:java.lang.reflect.Field

getFields(): 获取类中public类型的属性
 java.lang.reflect.Field[] fields=c1.getFields();
  System.out.println("共有属性:"+fields.length);
  for(java.lang.reflect.Field f:fields)
  {
   String fName=f.getName();
   System.out.println("属性名字:"+fName);
   Class<?> fType=f.getType();
   System.out.println("属性类型:"+fType);
   //获取属性访问的限定符
   int mType=f.getModifiers();
   //判断何种限定符
   if(java.lang.reflect.Modifier.isPublic(mType))
   {
    System.out.println("isPublic");
   }
   if(java.lang.reflect.Modifier.isAbstract(mType))
   {
    System.out.println("isAbstract");
   }
   if(java.lang.reflect.Modifier.isFinal(mType))
   {
    System.out.println("isFinal");
   }
  }

对于类中的属性,我们常用的操作:获取属性的值、修改属性的值。
3.Method类:java.lang.reflect.Method,可以获取类的方法;我们可以发现这是一个数组,当我们得到这个数组之后就获取到了所有类的方法,以及方法的类型,参数,参数类型等。

java.lang.reflect.Method[] methods=c1.getMethods();

4.Constructor类:代表类的构造方法。

//获得类中的构造器对象数组
  java.lang.reflect.Constructor[] cons=c1.getConstructors();

5.Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值