反射面试大全

发布于:2023-01-12 ⋅ 阅读:(524) ⋅ 点赞:(0)

一:什么是反射

反射即是用来描述一组类,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

1,JAVA反射机制是在运行状态中

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

二:反射的范围

  • class:用来描述类本身

  • Packge:用来描述类所属的包

  • Field:用来描述类中的属性

  • Method:用来描述类中的方法

  • Constructor:用来描述类中的构造方法

  • Annotation:用来描述类中的注解

三:如何获取Class

(1)Class clazz=class.forName("包名.类名")

(2)Class clazz=类名.class;

(3)Class clazz=对象.getClass();

四:反射中常用的方法

(1)获取类的权限修饰符--------->int result=getModifiers();

(2)获取名字------------>string name=clazz.getName();

(3)获取包名------------>Packge p=clazz.getPackge();

(4)寻找clazz中无参数构造方法

        Clazz.getConstructor([String.class]);

        执行构造方法创建对象
        Con.newInstance([参数]);

(5)Field c=cls.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
         Field c=cls.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和 proteced,但是 不包括父类的声明字段

五:反射得利与弊

(1)反射得经典用法就是在xml或者properties配置文件中,然后在java类里面区解析这些内容,得到一个字符串,然后通过反射机制,通过这些字符串获得某个类得class实例,这样的话就可以动态的配置一些东西,而不需要每次都重新去new,要改的话也是直接改配置文件,代码维护起来方便很多。

(2)当你在做一个软件开发的插件的时候,你连插件的类型名称都不知道,你怎么实例化这个对象呢?因为程序是支持插件的(第三方的),在开发的时候并不知道 。所以无法在代码中 New出来 ,但反射可以,通过反射,动态加载程序集,然后读出类,检查标记之后再实例化对象,就可以获得正确的类实例。

(3)在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象.反射的目的就是为了扩展未知的应用。比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。很多工厂模式就是使用的反射。 
 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到