Java中反射机制与常用方法

反射机制

什么是反射?: 在运行状态中,对于任意一个类,都能获取这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法或属性,这种动态获取的信息以及动态调用对象方法的功能称为Java的反射机制!

Class类

通过反射机制可以动态获取类的信息以及调用对象方法,那他是怎么实现的呢?: 首先先明确Class也是一个类,也可以生成对象。对于每个类而言,在JRE中有且仅有一个不变的Class类型对象,而这个Class类型对象只能由系统建立,它封装了当前对象所对应类的信息,比如属性、方法、构造器以及实现了哪些接口等。

要获取类的信息或调用对象的方法,首先获取该类或对象的Class实例。一般获取Class有三种方式:
1. 通过类名获取,类名.class
2. 通过对象获取,对象.getclass();
3. 通过全类名获取,Class.forName(“全类名”);

可以使用String类做验证:
	//实例化Class
	Class cla = null;
	//1. 类名.class
	cla = String.class;
	system.out.println(cla);
	//2. 对象.getclass();
	cla = "String".getclass();
	system.out.println(cla);
	//3. Class.forName("全类名");
	cla = Class.forName("java.lang.String");
	system.out.println(cla);
	
输出结果:
	class java.lang.String
	class java.lang.String
	class java.lang.String
通过3种方式获取到Class实例后,再来了解一下Class的常用方法。

Class常用方法与解释:

1. getName():返回String形式的该类的名称。
2. newInstance():根据某个Class对象产生其对应类的实例,它调用的是此类的默认构造方法(没有默认无参构造器会报错)
3. getClassLoader():返回该Class对象对应的类的类加载器。
4. getSuperClass():返回某子类所对应的直接父类所对应的Class对象
5. isArray():判定此Class对象所对应的是否是一个数组对象
6. getComponentType() :如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。
7. getConstructor(Class[]) :返回当前 Class 对象表示的类的指定的公有构造子对象。
8. getConstructors() :返回当前 Class 对象表示的类的所有公有构造子对象数组。
9. getDeclaredConstructor(Class[]) :返回当前 Class 对象表示的类的指定已说明的一个构造子对象。
10. getDeclaredConstructors() :返回当前 Class 对象表示的类的所有已说明的构造子对象数组。
11. getDeclaredField(String) :返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。
12. getDeclaredFields() :返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。
13. getDeclaredMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。
14. getDeclaredMethods() :返回 Class 对象表示的类或接口的所有已说明的方法数组。
15. getField(String) :返回当前 Class 对象表示的类或接口的指定的公有成员域对象。
16. getFields() :返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。
17. getInterfaces() :返回当前对象表示的类或接口实现的接口。
18. getMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。
19. getMethods() :返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
20. isInstance(Object) :此方法是 Java 语言 instanceof 操作的动态等价方法。
21. isInterface() :判定指定的 Class 对象是否表示一个接口类型
22. isPrimitive() :判定指定的 Class 对象是否表示一个 Java 的基类型。
23. newInstance() :创建类的新实例

以上内容是通过书籍总结出来的,如有什么不对或遗漏的地方,欢迎大家留言评论

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值