二十六、JavaSE----反射

举报
托马斯-酷涛 发表于 2022/05/26 00:16:59 2022/05/26
【摘要】 反射:         反射是Java中一个非常重要同时也是一个高级特性,基本上Spring等一系列框架都是基于反射的思想写成的。Java反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法;对于任意 一个对象,都能够知道调用它的任意...

反射:

        反射是Java中一个非常重要同时也是一个高级特性,基本上Spring等一系列框架都是基于反射的思想写成的。Java反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法;对于任意 一个对象,都能够知道调用它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为 java语言的反射机制。

Java反射机制主要提供了以下这几个功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所有的成员变量和方法
  • 在运行时调用任意一个对象的方法

        反射就像是一个掌控全局的角色,不管程序怎么运行,使用者都能够知道你这个类有哪些属性和方法,这个对象是由谁调用的,反射的优点显而易见。

下面是一个典型的反射类

 与Java反射有关的类主要有

Class类

        在Java中,每定义一个java class实体都会产生一个Class对象。也就是说,当我们编写一个类, 编译完成后,在生成的.class文件中,就会产生一个Class对象,这个Class对象用于表示这个类的类型信息。Class中没有公共的构造器,也就是说Class对象不能被实例化。

其中Class类包括的方法有:

toString()

         toString()方法能够将对象转换为字符串,toString()首先会判断Class类型是否是接口类型,也就是说,普通类和接口都能够用Class对象来表示,然后再判断是否是基本数据类型,这里判断的都是基本数据类型和包装类,还有void类型。

类型有如下几种:

  • java.lang.Boolean :代表boolean数据类型的包装类
  • java.lang.Character:代表char数据类型的包装类
  • java.lang.Byte:代表byte数据类型的包装类
  • java.Iang.Short:代表short数据类型的包装类
  • java.lang.Integer:代表int数据类型的包装类
  • java.lang.Long:代表long数据类型的包装类
  • java.lang.Float:代表float数据类型的包装类
  • java.lang.Double:代表double数据类型的包装类
  • java.lang.Void:代表void数据类型的包装类

getName()

        这个方法返回类的全限定名称。

  • 如果是引用类型,比如 String.class.getNameQ -> java. lang. String
  • 如果是基本数据类型byte.class.getNameO -> byte

  • 如果是数组类型new Object[3]).getClass().getName() -> [L java. lang.Object]

forName()

        根据类名获得一个Class对象的引用,这个方法会使类对象进行初始化。

例如 Class t = Class. forName(" java. lang.Thread")就能够初始化一个 Thread 线程对象

getClassLoader()

        获取类加载器对象。

getDeclaredMethods()

        获得该类所有方法

Field类

        Field类提供类或接口中单独字段的信息,以及对单独字段的动态访问。

equals(Object obj)

        属性与ob j相等则返回true

get(Object obj)

        获得obj中对应的属性值

set(Object obj, Object value)

        设置obj中对应属性值

Method

invoke(Object obj, Object... args)

        传递object对象及参数调用该对象对应的方法

ClassLoader

        反射中,还有一个非常重要的类就是ClassLoader类,类装载器是用来把(class)装载进JVM 的。ClassLoader使用的是双亲委托模型来搜索加载类的,这个模型也就是双亲委派模型。

ClassLoader的类继承图如下:

 

文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/120024723

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。