01. Java反射API
java.lang.Class类
Class 类的一个实例表示 Java 的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和 void。Class 没有公有的构造方法,Class 实例是由 JVM 在类加载时自动创建的。
在程序代码中获得 Class 实例可以通过如下代码实现:
1 2 3 4 5
| Class clz1 = String.class; String str = "Hello";
Class clz2 = str.getClass();
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static void main(String[] args) { Class<String> clz1 = String.class; String str = "chenym"; Class<? extends String> clz2 = str.getClass(); Class<Integer> clz3 = int.class; Class<Integer> 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()); }
|
示例结果:
1 2 3 4 5 6 7
| clz2类名称:java.lang.String clz2是否为接口:false clz2是否为数组对象:false clz2父类名称:java.lang.Object clz2是否为基本类型:false clz3是否为基本类型:true clz4是否为基本类型:false
|
java.lang.reflect包
该包下包含了反射使用到的类,主要有:
- Constructor 类:提供类的构造方法信息。
- Field 类:提供类或接口中成员变量信息。
- Method 类:提供类或接口成员方法信息。
- Array 类:提供了动态创建和访问 Java 数组的方法。
- Modifier 类:提供类和成员访问修饰符信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static void main(String[] args) { try { Class<?> c = Class.forName("com.example.basejava.reflect.Person"); Method[] methods = c.getDeclaredMethods(); for (Method method : methods) { System.out.println("打印每个方法的访问权限:"); System.out.println(Modifier.toString(method.getModifiers())); System.out.println("--------------------------------"); System.out.println("打印每个方法的返回值:"); System.out.println(method.getReturnType().getName() + " "); System.out.println("--------------------------------"); System.out.println("打印每个方法方法名称:"); System.out.println(method.getName()); } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } }
|
11