JAVA 反射机制

JAVA对象,类的关系以及它们在JVM中的位置

在这里插入图片描述
左边是方法区,类存放在方法区
中间是栈,存放类的引用
右边是堆,存放对象

Class是说明书的说明书,它告诉了我们说明书该怎么写,比如可以有方法,属性,构造方法等

我们写的class都是说明书,比如可以有哪些方法,哪些属性,如Dog类,User类

在这里插入图片描述

使用Class对象(类对象)实例化一个对象

在这里插入图片描述

Class类包含了类的信息,如构造方法、方法、属性,可用于反射

如何使用Java的反射?
1).通过一个全限类名创建一个对象
Class.forName(“全限类名”); 例如:com.mysql.jdbc.Driver Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了
类名.class; 获取Class<?> clz 对象
对象.getClass();
2).获取构造器对象,通过构造器new出一个对象
Clazz.getConstructor([String.class]);
Con.newInstance([参数]);
通过class对象创建一个实例对象(就相当与new类名()无参构造器)
Cls.newInstance();
3).通过class对象获得一个属性对象
Field c=cls.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
Field c=cls.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是 不包括父类的声明字段
4).通过class对象获得一个方法对象
Cls.getMethod(“方法名”,class……parameaType);(只能获取公共的)
Cls.getDeclareMethod(“方法名”);(获取任意修饰的方法,不能执行私有)
M.setAccessible(true);(让私有的方法可以执行)
让方法执行
1). Method.invoke(obj实例对象,obj可变参数);-----(是有返回值的)
当前方法,
在这里插入图片描述
这个是Person类里面有个eat方法,参数是String
在这里插入图片描述
先获取Person类的Class对象

在这里插入图片描述
再获取指定名称的方法,用方法名和方法参数类型的Class
在这里插入图片描述

传入对象和参数,执行方法

用传统的OOP思想来说,任何一个你写好的且编译过的生成的Class文件,在被类加载器加载后,都会对应有一个java.lang.Class这个类的实例。所以说,每个类的自有的方法属性(类结构)自然被包含在了这个对应的实例上,因此就可以获取到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值