一、 java.lang.Class类
java.lang.Class类是实现反射的关键,,Class类的一个实例表示Java的一种数据类型,包括类、接 口、枚举、注解(Annotation)、数组、基本数据类型和void,void是“无类型”,主要用于方法返回值 类型声明,表示不需要返回值。Class没有公有的构造方法,Class实例是由JVM在类加载时自动创建 的。
获得Class实例可以通过如下代码:
//1.通过类型class静态变量 Class clz1 = String.class; String str = "Hello"; //2.通过对象的getClass()方法 Class clz2 = str.getClass();
每一种类型包括类和接口等,都有一个class静态变量可以获得Class实例。另外,每一个对象都有 getClass()方法可以获得Class实例,该方法是由Object类提供的实例方法。
Class类提供了很多方法可以获得运行时对象的相关信息,下面的程序代码展示了其中一些方法。
public class HelloWorld { public static void main(String[] args) { // 获得Class实例 // 1。通过类型class静态变量 Class clz1 = String.class; String str = "HelloWorld"; // 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.getInterfaces()); 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是否为接口:[Ljava.lang.Class;@61bbe9ba clz2是否为数组对象:false clz2父类名称:java.lang.Object clz2是否为基本数据类型:false clz3是否为基本数据类型:true clz4是否为基本数据类型:false
二、java.lang.reflect包
java.lang.reflect包提供了反射中用到类,主要的类说明如下:
Constructor类:提供类的构造方法信息。
Field类:提供类或接口中成员变量信息。
Method类:提供类或接口成员方法信息。
Array类:提供了动态创建和访问Java数组的方法。
Modifier类:提供类和成员访问修饰符信息。
示例代码如下:
public class HelloWorld { 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.println(Modifier.toString(method.getModifiers())); // 打印返回值类型名称 System.out.println(" "+method.getReturnType().getName()+" "); // 打印方法名称 System.out.println(method.getName()+"();"); } } catch (ClassNotFoundException e) { System.out.println("找不到指定类"); } } }
运行结果:
public boolean equals(); public java.lang.String toString(); public int hashCode(); public volatile int compareTo(); public . . .