天津专业做网站的公司,私人免费网站怎么下载,wordpress博客小程序,晋城网站建设网站实现 Java 反射机制的类都位于 java.lang.reflect 包中#xff0c;java.lang.Class 类是 Java 反射机制 API 中的核心类。
java.lang.Class 类
java.lang.Class 类是实现反射的关键所在#xff0c;Class 类的一个实例表示 Java 的一种数据类型#xff0c;包括类、接口、枚…实现 Java 反射机制的类都位于 java.lang.reflect 包中java.lang.Class 类是 Java 反射机制 API 中的核心类。
java.lang.Class 类
java.lang.Class 类是实现反射的关键所在Class 类的一个实例表示 Java 的一种数据类型包括类、接口、枚举、注解Annotation、数组、基本数据类型和 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 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 是基本数据类型所以输出结果为 trueInteger 是类是引用数据类型所以输出结果为 false。
java.lang.reflect 包
java.lang.reflect 包提供了反射中用到类主要的类说明如下 Constructor 类提供类的构造方法信息。Field 类提供类或接口中成员变量信息。Method 类提供类或接口成员方法信息。Array 类提供了动态创建和访问 Java 数组的方法。Modifier 类提供类和成员访问修饰符信息。代码如下
public class ReflectionTest {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、privateSystem.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 的静态方法forName(String)创建某个类的运行时对象其中的参数是类全名字符串如果在类路径中找不到这个类则抛出 ClassNotFoundException 异常代码第 17 行。
代码第 7 行是通过 Class 的实例方法 getDeclaredMethods() 返回某个类的成员方法对象数组。代码第 9 行是遍历成员方法集合其中的元素是 Method 类型。
代码第 11 行的method.getModifiers()方法返回访问权限修饰符常量代码是 int 类型例如 1 代表 public这些数字代表的含义可以通过Modifier.toString(int)方法转换为字符串。代码第 13 行通过 Method 的 getReturnType() 方法获得方法返回值类型然后再调用 getName() 方法返回该类型的名称。代码第 15 行method.getName()返回方法名称。