0
点赞
收藏
分享

微信扫一扫

Java之反射(重要 · 上)

Java反射机制API

Java反射机制API主要是java.lang.Class类和java.lang.reflect包。

java.lang.Class类

java.lang.Class类是实现反射的关键所在,Class类的一个实例表示Java的一种数据类型,包括类,接口,枚举,注解(annotation),数组,基本数据类型和void,void是“无类型”,主要用于方法返回值类型声明,表示不需要返回值。Class没有公有的构造方法,Class实例是是由JVM在类加载时自动创建的。

Class类提供了很多方法可以获得运行时对象的相关信息,下面的程序代码展示了其中的一些方法:

package java2023_08_10;

public class LangClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Class class1 = String.class;
		String str = "Hello";
		Class class2 = str.getClass();
		Class class3 = int.class;        //①
		Class class4 = Integer.class;    //②

		System.out.println("class2类名称:" + class2);
		System.out.println("class2是否为接口:" + class2.isInterface());
		System.out.println("class2是否为数组对象:" + class2.isArray());
		System.out.println("class2父类名称:" + class2.getSuperclass().getName());

		System.out.println("class2是否为基本类型:" + class2.isPrimitive());
		System.out.println("class3是否为基本类型:" + class3.isPrimitive());
		System.out.println("class4是否为基本类型:" + class4.isPrimitive());
	}

}

Java之反射(重要 · 上)_反射机制

注意上面第①、②行的区别:int和Integer的区别在于int是基本数据类型,所以输出结果为true,Integer是类,是引用类型。

java.lang.reflect包

java.lang.reflect包提供了反射中用到的类,主要的类说明如下:

  1. Constructor类:提供类的构造方法信息。
  2. Field类:提供类或接口中成员变量信息。
  3. Method类:提供类或接口成员方法信息。
  4. Array类:提供了动态创建和访问java数组的方法。
  5. Modifier类:提供类和成员访问修饰符信息。

示例代码如下:

package java2023_08_10;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class LangReflect {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			// 动态加载xx类的运行时对象
			Class class1 = Class.forName("java.lang.String");
			// 获取成员方法集合
			Method[] method = class1.getDeclaredMethods();
			// 遍历成员方法集合
			for (Method m : method) {
				// 打印权限修饰符
				System.out.println(Modifier.toString(m.getModifiers()));
				// 打印返回值类型名称
				System.out.println(" " + m.getReturnType().getName() + " ");
				// 打印方法名称
				System.out.println(m.getName() + "();");
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("找不到指定类");
		}

	}

}

Java之反射(重要 · 上)_Java_02

反射(reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、哪些构造方法以及有哪些成员变量。Java语言提供了反射机制,通过反射能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以用于框架开发,它能够从配置文件中读取配置信息动态加载类,创建对象,以及调用方法和成员变量。

举报

相关推荐

0 条评论