RTTI和反射

1、RTTI

    RTTI,运行时类型检查。JAVA中主要有两种方法允许我们获得运行时对象和类的信息。

    传统的RTTI,假设我们在编译期和运行期已经知道了所有的类型。表现在以下几个方面:

        Class对象是RTTI的核心,每个类都有一个Class对象
        instanceof 关键字,用于检查对象是不是某个特定类型的实例
     强制类型转换

    反射,允许在运行期获得对象的类型。

2、Class对象

    class TestClass {}

    TestClass testClass = new TestClass();

    Class c = Class.forName("TestClass");  TestClass testClass = c.newInstance(); //运行期间检查

    Class c = TestClass.class;  TestClass testClass = c.newInstance();   //编译期间检查

    三种获取对象的方法

3、使用isInstance替代instance of

    这样做总是有好处的。

4、Class对象

    获取Class对象:

        Class c = Class.forName("TestClass");   //返回Class的引用,而并不需要生成Class类型的对象

        TestClass testClass = new TestClass();   Class c = testClass.getClass();   //通过类的对象,来获取Class的引用    

    Class对象的一些有趣用法

        Class c = Class.forName("TestClass"); 

        c.isInterface();

        c.getName();

        c.getSuperClass();

5、反射

    如果你不知道一个对象的确定类型,RTTI可以告诉你。但是有个限制:这个类型在编译期间必须已知,才能使用RTTI来识别它。例如,在磁盘上或者网络中的一段字符串,被告知代表一个类,但是编译器在编译代码的时候,并不知道,怎么才能使用这个类呢?这时候就需要使用反射。

    通过反射与未知类型的对象打交道时,JVM只是简单地检查这个对象,看它属于哪个特定的类(与RTTI一样)。但在这之后,在做其它事情之前,必须加载那个类的 Class 对象。因此,那个类的.class 文件对于 JVM 来说必须是可获取的,要么在本地机器上,要么可以通过网络取得。 

    RTTI:编译器在编译期间打开和检查.class文件

    反射:编译器在运行期间打开和检查.class文件

6、类方法提取器

    Pattern p = Pattern.compile("\\w+\\.");    //正则表达式,提取字符串的一部分时可能会用到。此表达式意思是一个或多个字符构成的单词,后面跟一个点号

    c.getMethods();                         //获取此Class对象所代表类或者接口的所有公有方法

    c.getDeclaredMethods();        //获取此Class对象所代表类或者接口(包含从父类继承的)的所有方法,包括私有方法,但不包含继承方法



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值