反射(Reflection)基础知识

Class类

系统里面保存的runtime type identification跟踪了每个object属于的class。
虚拟机利用runtime type information再根据上面的信息来选择正确的方法去执行。事实上虚拟机为每个类型都管理一个Class对象。
在Java里面,上述信息也可以通过一个特殊的class来获得——CLass
那么如何得到Class类的实例呢?coreJava上列举了三种方法。

  • Object类的getClass方法;
  •     Employee e;
        ...
        Class cl = e.getClass();//这里得到一个Class实例,可以使用getName来获得此实例代表的类名字,如果类在包里面,包的名字也会作为类名的一部分。
        String name = cl.getName();

  • Class类的forName方法(此方法需要异常处理器)
  •     //当类名保存在字符串中并可在运行中改变(循环结构),就可以使用这个方法。
    
         static Class forName(String className);//returns the Class object representing the class with name className
    
         String className = "java.util.Random";//这里的字符串必须是类名或者接口名,否则会抛出异常,所以需要异常处理器
         Class cl = Class.forName(className);

  • 对任意Java类型T使用T.class
  •     Class cl1 = java.util.Random.class;
        Class cl2 = Double[].class;
        Class cl3 = int.class;//值得注意的是,一个Class对象实际上表示的是一个类型,而这个类型不一定是类

    The Class class is actually a generic class. For example, Employee.class is of type Class.

    对于类来说,有一个快速创建类的实例的方法newInstance.可以和上面的getClass以及forName结合起来。

        //java.lang.Class
        Object newInstance();//返回类的一个新实例,调用默认构造器(无参数)
    
        //java.lang.reflect.Constructor
        Object newInstance(Object[] args);//提供参数
    
        Object m = e.getClass().newInstance();//一个例子
    
        m = Class.forName(e.getClass().getName()).newInstance();//这样貌似也可以
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值