Java-反射

Java-反射

1 概念

1、Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
2、加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射

image-20210703193128417

2 反射相关API

java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器

3 获取class的四种方法

		// 已知具体的类
		Class myClass = String.class;
		System.out.println(myClass);
		// 已知某个类的实例
		Class myClass1 = "word".getClass();
		System.out.println(myClass1);
		// 已知一个类的全类名
		Class myClass2 = Class.forName("java.lang.String");
		System.out.println(myClass2);
		// 从类加载器获取
		ClassLoader classLoader = TestReflection.class.getClassLoader();
		Class myClass3 = classLoader.loadClass("java.lang.String");
		System.out.println(myClass3);

4 反射的应用

反射可以获取如下内容:

FieldMethodConstructorSuperclassInterfaceAnnotation

Class myClass = Class.forName("java.lang.String");
		System.out.println("获取实现的全部接口");
		Class[] classes = myClass.getInterfaces();
		for (Class class1 : classes) {
			System.out.println(class1);
		}
		System.out.println("获取所继承的父类");
		Class cl = myClass.getSuperclass();
		System.out.println(cl);

		System.out.println("获取全部的构造器");
		Constructor[] constructor = myClass.getConstructors();
		for (Constructor constructor2 : constructor) {
			System.out.println(constructor2);
		}

		System.out.println("获取全部的方法");
		Method[] methods = myClass.getDeclaredMethods();
		for (Method method : methods) {
			System.out.println(method);
		}

		System.out.println("获取全部的Field");
		Field[] fields = myClass.getDeclaredFields();
		for (Field field : fields) {
			System.out.println(field);
		}

		System.out.println("获取Annotation");
		Annotation[] annotations = myClass.getDeclaredAnnotations();
		for (Annotation annotation : annotations) {
			System.out.println(annotation);
		}

		System.out.println("获取泛型");
		Type type = myClass.getGenericSuperclass();
		System.out.println(type);

		System.out.println("获取类所在的包");
		Package package1 = myClass.getPackage();
		System.out.println(package1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值