反射

一个例子:比如说,eclipse这个软件是先开发好的,你的程序是后写的。为什么eclipse能给你类型的上下文关键字提示,当你输入一个对象,会有一个列表列出所有的对象的方法,这个就是靠的反射。
一个道理,eclipse上有很多插件,明显先有的eclipse后有的插件,那么 eclipse 怎么创建和调用这些插件呢?还是需要反射。

Java 反射是可以让我们在运行时获取类的方法、属性、父类、接口等类的内部信息的机制。也就是说,反射本质上是一个“反着来”的过程。我们通过new创建一个类的实例时,实际上是由Java虚拟机根据这个类的Class对象在运行时构建出来的,而反射是通过一个类的Class对象来获取它的定义信息,从而我们可以访问到它的属性、方法,知道这个类的父类、实现了哪些接口等信息。

总结: 通常,我们通过类来创建对象,然后利用这个对象来调用方法,从而获得这个类的属性和方法,但是利用反射机制,我个人理解就是,反射就是让你可以随便调用你没有实例化的东西,因为类在实例化之后就固定了,而反射就打破了这种固定模式,即使你的类没有被实例化加载到内存中,你一样可以在你要使用的时候找到它。

张孝祥说:“反射就是把Java类中的各种成分映射成相应的java类”,其细节方面就是你通过自己编写代码来将类加载到java虚拟机中,也有人称“反射”为“类的自解析”。

通过反射可以让程序变得更加灵活。

  • 反射:将类的各个组成部分封装为其他对象,这就是反射机制

    • 好处:

      1. 可以在程序运行过程中,操作这些对像。
      2. 可以解耦,提高程序的可扩展性。
    • 获取Class对象的方式:

    1. Class. forName("全类名") :将字节码文件加载进内存,返回class对象

      • 多用于配道文件,将类名定义在配做文件中。读取文件,加载类
    2. 类名.class :通过类名的以性c lass获取

      • 多用于参数的传递
    3. 对像.getclass() : getclass()方法在object类中定义着。

      • 多用于对象的获取字节码的方式
    • 结论:

      同一个字节码文件(* .class)在一次程序运行过程中,只会被加载一次, 不论通过哪-种方式获取的Class对象都是同一个。

    • Class对象功能:

    • 获取功能:

      1. 获取成员变量们
      2. 获取构造方法们
      3. 获取成员方法们
      4. 获取类名

method.invoke();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。