JAVA零基础学习笔记14

一、反射机制概述
二、Class类
三、反射获取一个类的父类和接口
四、反射获取一个类的构造方法
五、通过反射创建一个对象
六、反射机制获取类的方法
七、反射机制获取类的属性和包
八、反射机制调用指定方法
九、反射机制调用指定属性
十、java动态代理

一、反射机制概述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Class类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码部分如下:
首先创建类Person,然后创建类Test
(通过Class的静态方法forName(“类的路径”))是常用方法
在这里插入图片描述

三、反射获取一个类的父类和接口
关键字:getSuperclass()、getInterfaces()
在这里插入图片描述
代码部分如下:
(1)创建类Person,接口Move,接口Study;
(2)创建类Student继承类Person,实现两个接口;
在这里插入图片描述

(3)创建类Test3,在main方法中试验
在这里插入图片描述
执行结果为:
父类:day14.Person
接口:day14.Move
接口:day14.Study

四、反射获取一个类的构造方法
关键词:getConstructors()、getDeclaredConstructors()、getModifiers()、getName()、getParameterTypes()
在这里插入图片描述
代码部分如下:
(1)在类Student中建立构造方法
在这里插入图片描述
(2)在main方法中试验
①获取类的公有的构造方法
在这里插入图片描述
执行结果为:

构造方法名称:day14.Student
构造方法的修饰符:1
构造方法的参数类型:java.lang.String

构造方法名称:day14.Student
构造方法的修饰符:1

②获取类的所有(公有+私有)的构造方法
在这里插入图片描述
执行结果为:

构造方法名称:day14.Student
构造方法的修饰符:2
构造方法的参数类型:java.lang.String
构造方法的参数类型:int

构造方法名称:day14.Student
构造方法的修饰符:1
构造方法的参数类型:java.lang.String

构造方法名称:day14.Student
构造方法的修饰符:1

五、通过反射创建一个对象
有以下三个构造方法:
①公有无参
②公有有参
③私有有参
在这里插入图片描述
用三种方法在main方法中分别创建三个对象,代码部分如下:
关键词 newInstance()、getConstructor(String.class)、getDeclaredConstructor(String.class, int.class)
在这里插入图片描述
执行结果为:
第一中学
jack
21

六、反射机制获取类的方法
关键词 getMethods()、getDeclaredMethods()
在这里插入图片描述
代码部分如下:
在这里插入图片描述
执行结果为(与类Student中方法信息吻合):
方法名:test
返回值类型:void
修饰符:2
参数类型java.lang.String

方法名:getschool
返回值类型:class java.lang.String
修饰符:1

方法名:studyInfo
返回值类型:void
修饰符:1

方法名:moveType
返回值类型:void
修饰符:1

方法名:showInfo
返回值类型:void
修饰符:1

注意:使用getMethods()时,返回更多方法,猜测是把继承的父类Object的方法也打印出来了。

七、反射机制获取类的属性和包
在这里插入图片描述
代码部分如下:
关键字 getFields()、getDeclaredFields()、getPackage()
在这里插入图片描述
执行结果为:
属性的名称:school
属性的类型:class java.lang.String
修饰符:1
属性的名称:privateField
属性的类型:class java.lang.String
修饰符:2
day14

注意:似乎在本节所有提及的形如 getFields()、getDeclaredFields()的,用 Declared 加以区分的关键字,都有共同处:
一个包含父类的,公有的;
加了Declared只在本类中所有的(公有的+私有的)。

八、反射机制调用指定方法
在这里插入图片描述
关键字 getMethod、invoke

程序部分如下:
(1)
在这里插入图片描述
(2)
在这里插入图片描述
(3)获取公有方法
在这里插入图片描述
(4)获取私有方法(实际证明还是公有+私有方法)
在这里插入图片描述
(5)获取重载方法(同名而不同性质)
在这里插入图片描述
(6)获取一个有返回值的方法
在这里插入图片描述
(7)执行结果为:
这是setInfo(String name, String school)方法
这是私有方法test(String name)
这是setInfo(int age)方法
第一中学

九、反射机制调用指定属性
在这里插入图片描述
代码部分如下:
关键字 Field、getField、getDeclaredField、set、get、setAccessible

(1)
在这里插入图片描述
(2)反射创建一个对象(区别于八中的方法,达到的最终效果是一样的)
在这里插入图片描述
(3)获取公有属性并更改
在这里插入图片描述
(4)获取私有属性并更改
在这里插入图片描述
(5)执行结果为:
第二中学
测试私有属性

十、java动态代理
在这里插入图片描述
在这里插入图片描述
关键字:InvocationHandler、Proxy.newProxyInstance

需求:
在各个方法执行前输出:(方法名)开始执行;
在各个方法执行完成后输出:(方法名)执行完毕。
代码部分如下:
(1)先创建存储各个方法名的接口
在这里插入图片描述
(2)创建类TestDemoImpl连接接口
在这里插入图片描述
(3)创建动态代理类,连接接口InvocationHandler
在这里插入图片描述
(4)在main方法中使用
①首先调用为更改的方法,观察执行结果
在这里插入图片描述
②传入要代理的对象(使用了动态代理类中编写的有参构造)
在这里插入图片描述
③调用Proxy.newProxyInstance(loader, interfaces, h)
在这里插入图片描述
(5)执行结果为:
执行test1()方法
执行test2()方法
&===============&
test1方法开始执行
执行test1()方法
test1方法执行完毕
&-------------&
test2方法开始执行
执行test2()方法
test2方法执行完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值