反射机制

作者: 程序员三千_ | 来源:发表于2019-02-20 15:07 被阅读53次

    什么是反射?

        反射机制是在程序运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;

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

    这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

    反射的作用

    1.可以实现简单的反编译,获取类中的属性和方法等基本信息,.class—>java

    2.通过反射机制获取类的属性、方法等

        在使用eclipse时,通过对象引用.的方式,eclipse就会将这个对象中的所有属性和方法展示出来,这个就是利用的反射机制。其实反射应用最多的地方就是将来要学习的框架,例如spring、spring MVC、Mybatis、hibernate、Struts等等

    反射的优点

        提高程序的灵活性和扩展性。使用反射机制后,程序在创建对象的时候不用使用new关键字写死在程序中了,而是从配置文件中进行读取,这样可以提高程序的灵活性

    反射的缺点

        影响性能。使用反射时,代码量稍微多点,并且是要动态的将读取类,所以会影响性能。下面例子可能不太恰当,不过希望能够帮助你更好地了解,比如你要做汽车:

    正常的方式是司机停车,你开门上车。

    动态的方式就是司机不停车,只降低车速,然后你跑着开门上车。

    破坏封装性。

    Class对象

        在类加载器将.class文件读取到内存中的时候,jvm会创建这个.class文件的对象,并且只创建一个存放到jvm的方法区内存中,在java.lang包下有个Class类,这个类就是.class文件的对象类型,任何类在被使用时,都会创建这个类的Class对象。除此之外,在java.lang.reflect包下面的类也跟反射有关。

    创建一个Person类:

    获取这个Person类的Class对象有三种方式:

    使用反射将.class文件读取到内存中

    将上面的Person.java文件删除,留下Person.class文件。

    使用反射将Person.class文件读取到内存中

    使用反射创建Person类的对象

    使用反射获取类中的属性

    使用反射获取类中指定的属性并赋值

    使用反射获取类中的方法

    下面程序将.class文件中的方法反编译并打印出来了

    User类:

    测试类:

    使用反射调用类中的方法

    使用反射获取构造方法

    使用反射获取父类和父接口

    相关文章

      网友评论

        本文标题:反射机制

        本文链接:https://www.haomeiwen.com/subject/zhkhyqtx.html