运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型;还有一种,是利用反射机制,在运行时再尝试确定类型信息。

  本篇博文会结合Thinking in Java 的demo 和实际开发中碰到的例子,对Java反射和获取类型信息做总体上整理。文章主要分为三块:

  •   Java类加载和初始化

  •   Java中RTTI

  •   Java利用反射获取运行时类型信息

一:Java类加载和初始化

  在学习RTTI的时候,首先需要知道Java中类是如何加载的,java又是如何根据这些class文件得到JVM中需要的信息(备注:我在此处实在是想不到更好的描述,望读者可以给出更好的描述)

1.1 类加载器(类加载的工具)

  类加载器子系统包含一条加载器链,只有一个“原生的类加载器”他是jvm实现的一部分,可以用来记载本地jar包内的class,若涉及加载网络上的类,或者是web服务器应用,可以挂接额外的类加载器。

1.2 Java使用一个类所需的准备工作

1.2.1 动态加载

  所有的类都是第一次使用的时候,动态加载到JVM中。创建对类的静态成员的引用,加载这个类。Java程序在开始运行的时候并非完全加载,类都是用的地方在加载,这就是动态加载

  ①:首先检查这个类是否被加载

  ②:如果没有加载,再去根据类名查找.class文件,加载类的字节码,并校验是否存在不良代码,

测试代码如下:

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

//candy.javapublic class Candy {    static {
        System.out.println("loading Candy");
    }
}//co
        
		

网友评论