文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的反射机制是什么意思

2023-06-02 12:51

关注

这篇文章给大家分享的是有关Java中的反射机制是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  今天我们就来讲讲java的反射机制。

  当程序主动使用某个类的时候,如果该类还没有被加载到内存中,则系统会通过加载、连接、初始化这三个步骤对该类进行初始化,有时候会把这一整个流程叫做类加载器或类初始化

  类加载时值将类文件读入到内存中,并且为该类创建一个对象、之后可以直接通过对象来调用类及其实现的父类方法和属性

  一、反射机制到底是什么:类是由一组对象(拥有着共同属性)来组成的,而类与类之间也有共同的属性、构造方法、方法等结构,用来描述类的特性,即可以调用或查看某个类的属性、方法、即构造方法就叫做反射。

  二、java反射机制的好处:

  1.极大的提高了应用程序的扩展性,之前都是通过多来将子类对象传递给父类应用来实现的,大大的增加了代码的耦合性,并且无法访问真实对象的信息,这个时候就可以采取使用反射机制。

  2.当代码需要后期维护的时候,则需要修改很多地方,而通过反射机制,只需要直接修改一个地方即可。

  e.g Person person=new Student();

  三、应用场景:一般应用于底层框架的应用,不过大部分都已经封装好了的、以及可以实现工厂模式和代理模式等设计模式,同时也可以解决java泛型擦除等令人苦恼的问题

  一个类的组成:

  成员变量、成员方法、构造方法、修饰符、包等

  四、反射的组成:1.Class(类本身) 2.Field(属性) 3.Method(方法)

  接下来就直接进入代码阶段吧:

  一、获取类的三种方法:

  Person person = new Person();

  1.Class clazz = Person.class;//通过类来获取对象

  2.Class clazz = Class.forName("Reflect.Person");//通过类权限名(包名.类名)来获取Class对象

  //Class.forName会抛出异常,因为根据字符串来找到类,所以可能会出现找不到这样的类异常

  3.Class clazz = person.getClass();//通过类对象来调用

  二、自身类

  Class []interfaces = clazz.getInterfaces();//获取Person类里所有的接口

  String classname = clazz.getName();//获取类名字(包名.类名)

  String simpleName = clazz.getSimpleName(); //仅仅只是获得类名字,并没有包名

  int modifiers = clazz.getModifiers();//获取权限符是什么 返回值是int 1:public 2:private依次

  Package aPackage = clazz.getPackage();//获得包名

  Class superclass = clazz.getSuperclass();//获取该类的父类,有且只有一个

  Object o = clazz.newInstance();//生成类的实例对象,由于不知道要生成什么类的对象,而所有类的顶端都是Object的子类郑州哪家医院人流好 http://www.120csfkyy.com/

  三、属性(Filed)

  Field math = clazz.getField("math");//获得指定的name属性,有且只能找到public的属性

  Field[] fields = clazz.getFields();//获得所有的public的属性,以及父类

  Field id = clazz.getDeclaredField("id");//获得public 以及private、protected等指定(id)属性

  Field[] declaredFields = clazz.getDeclaredFields();//获得所有的属性以及父类

  当然找到属性能干嘛了,最重要的就是赋值啦。

  由于私有属性,除了本类以外的类都不可进行其访问,所以在设置值上面自然和public的不太一样

  public属性设值:

  Field name = clazz.getField("name");

  name.set(o,"TTL");//第一个属性是要设置值得属性属于哪个类实例化对象里面的,第二个参数则是要设置的值

  private属性设置:

  Field sex = clazz.getDeclaredField("sex");

  sex.setAccessible(true);//设置访问权限

  sex.set(person1,"女");

  四、方法

  Method setAddress = clazz.getMethod("Address", String.class);

  //第一个参数为要找方法的名字,第二个参数则是要找方法的形参是什么类型的

  Object address = setAddress.invoke(person1, "苏州");

  //第一个参数为类实例化的对象,第二个参数为参数要设置的值

  //执行方法

  五、构造方法

  Constructor constructor = clazz.getConstructor(String.class, String.class);

  //由于构造方法和类名一样,这里就不需要在此写类名对象了,只需写参数即可匹配到对应的构造方法

  constructor.newInstance("TTL","四川");//执行构造方法

感谢各位的阅读!关于“Java中的反射机制是什么意思”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯