之前给大家介绍了一下java反射机制是什么的内容,那么下面要给大家详细的介绍的就是java反射机制API一起来了解一下吧。
实现Java反射机制的类都位于java.lang.reflect包中,java.lang.Class类是Java反射机制API中的核心类。
java.lang.Class类
java.lang.Class类是实现反射的关键所在,Class类的一个实例表示Java的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和void,Class没有公有的构造方法,Class实例是由JVM类加载时自动创建的。
在程序代码当中获得Class实例能够通过下面的代码来进行实现:
每一种类型包括类和接口等,都有一个class静态变量能够获得Class实例,除此之外,每一个对象都有getClass()方法能够获得Class实例,这个方法是由Object类提供的实例方法。
Class类提供了很多方法能够获得运行时对象的相关信息,下面的程序代码展示了其中一些方法。
public class ReflectionTest01 { public static void main(String[] args) { // 获得Class实例 // 1.通过类型class静态变量 Class clz1 = String.class; String str = "Hello"; // 2.通过对象的getClass()方法 Class clz2 = str.getClass(); // 获得int类型Class实例 Class clz3 = int.class; // 获得Integer类型Class实例 Class clz4 = Integer.class; System.out.println("clz2类名称:" + clz2.getName()); System.out.println("clz2是否为接口:" + clz2.isInterface()); System.out.println("clz2是否为数组对象:" + clz2.isArray()); System.out.println("clz2父类名称:" + clz2.getSuperclass() .getName()); System.out.println("clz2是否为基本类型:" + clz2.isPrimitive()); System.out.println("clz3是否为基本类型:" + clz3.isPrimitive()); System.out.println("clz4是否为基本类型:" + clz4.isPrimitive()); } }
运行结果:
clz2类名称:java.lang.String clz2是否为接口:false clz2是否为数组对象:false clz2父类名称:java.lang.Object clz2是否为基本类型:false clz3是否为基本类型:true clz4是否为基本类型:false
这里要注意一下,上面的代码当中的第10行和12行的区别,int是基本数据类型,所以输出结果为 true;Integer是类,是引用数据类型,所以输出结果为false。
java.lang.reflect包
java.lang.reflect包提供了反射中用到类说明:
示例代码:
public class ReflectionTest02 { public static void main(String[] args) { try { // 动态加载xx类的运行时对象 Class c = Class.forName("java.lang.String"); // 获取成员方法集合 Method[] methods = c.getDeclaredMethods(); // 遍历成员方法集合 for (Method method: methods) { // 打印权限修饰符,如public、protected、private System.out.print(Modifier.toString(method.getModifiers())); // 打印返回值类型名称 System.out.print(" " + method.getReturnType() .getName() + " "); // 打印方法名称 System.out.println(method.getName() + "();"); } } catch (ClassNotFoundException e) { System.out.println("找不到指定类"); } } }
上面的代码当中第5行是通过Class的静态方法创建某个类的运行时对象,这当中的参数是类全名字符串,假如,在类路径当中找不到这个类,那么就抛出ClassNotFoundException异常,见代码第17行。
代码第7行是通过Class的实例方法getDeclaredMethods()返回某个类的成员方法对象数组,代码第9行是遍历成员方法集合,其中的元素是Method类型。
第11行,方法返回访问权限修饰符常量代码,是int类型。
第13行通过Method的getReturnType()方法获得方法返回值类型,之后,再调用getName()方法返回这个类型的名称。
第15行返回方法名称。
对于java反射机制API的介绍你都清楚了吗?更多java反射机制java入门知识,可以继续关注奇Q工具网来进行了解哦。
推荐阅读: