![](https://img-blog.csdnimg.cn/e368675465f8447d84934b19d4b43543.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java动手做一做之反射编程学习
文章平均质量分 50
反射编程学习
程序员小牧之
汲取,分享与成长,我们唯一能做的就是坚持。
展开
-
12.反射与动态代理
使用代理可以在程序运行时创建一个实现指定接口的新类(代理类)。通常只有在编译时无法确定需要使用哪个接口时才需要使用代理,这对于应用程序员很少见。但是对于系统程序员而言,代理可以为工具类提供更加灵活的特性。下面我们学习一个简单的销售场景来理解动态代理的精髓。首先我们定义一个销售者接口:这个接口可以被很多销售者实现,比如时装销售者,房屋销售者等,它是一个公共的销售者接口。然后我们要定义一个房屋销售者实现它:好了,现在有了房屋销售者,我们可以编写程序对其进行使用了:这样做虽然可以实现功能,但是,如果我原创 2022-07-04 21:14:05 · 220 阅读 · 0 评论 -
11.利用反射写出通用toString方法
通过前面的学习,我们知道了反射其实是面向类编程的。下面我们综合所学的知识,来编写一个使用与所有对象的toString方法。下面学习两种意义上的toString:测试之首先写一个Bean类:然后:运行之:测试之:结果:测试成功!!项目代码:https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/main/java/ReflectStudy...原创 2021-11-28 16:24:24 · 571 阅读 · 0 评论 -
10.利用反射进行数组扩容
利用反射,我们无需再编写复杂的数组操作方法来进行数组的扩容,反射为我们提供了更为简便,效率更高的方式进行数组扩容。2.实例学习https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/main/java/ReflectStudy...原创 2021-11-28 15:51:16 · 519 阅读 · 0 评论 -
9.动态实例化类
在Java中,我们通常时使用构造方法来进行对象的创建的,而构造方法可以分为有参数和无参数两种。如果类中没有定义构造方法,那么默认会自动添加一个构造方法。下面我们学习如何使用Class获得类的构造器对象Constructor,并使用构造器对象创建对象关键方法:getDeclaredConstuctor(Class<?>... parameterTypes);//此方法用于获得指定类型入参的构造器对象newInstance(Object... initargs);//此方法用于创建一个对象原创 2021-11-28 15:48:56 · 409 阅读 · 0 评论 -
8.动态调用类中的方法
根据上一节类比,我们很容易知道,如果想要用反射操作某个对象的方法,那么Method对象是必不可少的。首先我们要获得Class对象的Method对象,然后调用:实例学习运行之:https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/main/java/ReflectStudy...原创 2021-11-26 20:36:56 · 626 阅读 · 0 评论 -
7.动态设置类的私有域
通常为了保证面向对象的封装特性,我们一般将Bean中的字段设置成私有的,然后提供对应的get和set方法对字段进行控制。下面学习如何利用反射来对对象的私有字段进行控制,达到运行时修改类的私有字段的目的。如果我们想对一个Class类型的对象的字段进行处理,我们必须获得这个类型的Field对象,然后通过调用它的下面方法进行操作:2.实例学习首先,我们先编写一个Bean:然后进行反射编程操作它:运行之:项目地址:https://gitee.com/yan-jiadou/study/tree/maste原创 2021-11-25 21:52:52 · 401 阅读 · 0 评论 -
6.查看内部类信息
下面学习如何获得一个类的内部类的信息关键方法getDeclaredClasses();此方法用于获得一个类的内部类的Class数组实例:import java.lang.reflect.Modifier;import java.lang.reflect.Type;public class NestedClassInformation { public static void main(String[] args) throws ClassNotFoundException {原创 2021-11-25 21:51:23 · 437 阅读 · 0 评论 -
5.按继承层次对类排序
下面我们学习如何实现按继承层次对类进行排序Java提供了instanceof运算符来比较两个类(或接口)之间是否存在继承关系。但是如果对多个类按照继承关系进行排序,使用这个运算符是非常麻烦的。但是利用反射,这个功能就显得比较简单了关键方法:我们可以利用这个方法,构建一个比较器编码如下:然后利用TreeSet数据结构(具体信息请查阅相关api)进行存储排序:运行之查看结果:项目地址:https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8原创 2021-11-24 21:17:09 · 702 阅读 · 1 评论 -
4.查看类的成员信息
一个类的成员包括:在反射中,变量用Field对象表示,构造器用Constructor对象表示,方法则用Method表示。Class中相关方法:实例学习首先编写测试用的Bean:然后编写程序:运行之,测试结果:项目地址:https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/main/java/ReflectStudy...原创 2021-11-23 21:44:07 · 665 阅读 · 0 评论 -
3.查看类的声明
通常类的声明可以包括如下信息:下面将学习如何获得这些信息:我们将用到Class类中的下面关键方法2.实例学习首先编写测试Bean:然后进行程序的编写:运行之,查看结果:注意(关于类的注解,并不是所有的注解都能获取到的,有些是不能获取的)当我们获得一个类的Class对象clazz时,我们可以用Class对象获得类的一些声明信息,2).获得类的泛型参数信息3).获得类实现的接口信息4).获得类的直接父类的信息5).获得类的注解信息项目地址:https://gitee.com/yan原创 2021-11-23 21:30:44 · 385 阅读 · 0 评论 -
2.获得Class对象表示实体的名称
基于第一个实验,当我们获得一个类型的Class对象的时候,首先我们需要学习获取该类型的名称,在Class类中有两个重要的方法:getName();它用于获取类的全称(包路径+类名)getSimpleName(); 它仅用于获取类名注意:对于数组类型的名称的获取,二者有区别,我们需要了解。项目地址:https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/m原创 2021-11-22 21:55:11 · 556 阅读 · 0 评论 -
1.实例化Class类的五种方式
Java的数据类型可以分为两类:引用类型和原始类型对于每种类型的对象,Java虚拟机会去实例化一个不可变的Java.lang.Class对象这个Class对象提供了在程序运行时检查对象属性的方法,这些属性包括一个类的成员和类型信息。可以说Class对象是反射编程的基础,入口,没有这个对象,反射根本就用不出来!!所以说Class是反射的入口,所有反射程序都是基于Class开发的,我们有必要掌握如何获得Class...原创 2021-11-22 21:53:39 · 1498 阅读 · 0 评论