美文网首页
Java - 反射

Java - 反射

作者: sunboximeng | 来源:发表于2018-06-18 17:49 被阅读6次

文件即对象。

Java反射机制就是上帝视角,可以用来获得一个类的所有信息,对一个对象进行任意的操作,包括修改其私有变量的值。
反射就是调用Class对象的方法。

反射的应用场景

  • IDE中对方法的提示
  • 开发框架。避免创建具体的类,而是依赖于配置文件,解耦。
    写一个极简的“框架”,读取配置文件!
    Class字节码文件也是一个File类,因此类加载的一部分过程类似于IO流技术。区别在于Java把Class文件的各个组成部分:属性、构造器、成员方法,都封装成了对象。
获取Class对象

并没有构造器。

  • Class . forName(全类名) ,静态方法
    • 底层调用了类加载器。
      • 类加载器加载class文件,可以看做是Class对象的构造器,他把Class文件变成了Class对象(也就是类初始化阶段)。
      • 一个Java对象的创建过程往往包括两个阶段:类初始化阶段 和 类实例化阶段。
    • 全类名不能使用双斜杠,只能用 点 分割包名。
    • 类名不能加后缀(如java、class),因为是类名!
    • 需要搭配读取配置稳健的代码吧,毕竟全类名也不想写死。
  • 类名 . Class,静态方法。
  • 对象 . getClass( )。实例方法,说明每个对象的内存中包含指向方法区的引用。
常用Class类的方法

简而言之,就是一个类的每个部分你都可以拿到。
方法里有 Declared 字样,就会获取到所有权限修饰符所修饰的目标。暴力反射需要setAccesible,以便访问私有。

1. 返回构造器对象 Constructor
  • Constructor<T> getConstructor(Class<?>... parameterTypes)、省略
  • Constructor类的常用方法:newInstance(Object... initargs)

必须先创建对象才能使用下面这两个方法(因为参数需要)

2. 返回属性对象 Field
  • Field getField(String name)、Field[ ] getFields()
  • Field 类的常用方法:get(Object 对象)、set(Object 对象, Object value)
3. 返回方法对象 Method
  • 可以返回所有的方法,包括继承的方法。Method getMethod(String name, Class<?>... parameterTypes)
  • Method类的常用方法:Object invoke(Object 对象, Object... args)
4. 返回类加载器
  • ClassLoader getClassLoader()
  • A Java program, unlike one written in C or C++, isn't a single executable file, but instead is composed of many individual class files, each of which corresponds to a single Java class. Normally classes are only loaded on demand. This means, these Java class files are not loaded into memory all at once, but rather are loaded on demand, as needed by the program (Class Loader).
  • 类加载器不仅可以加载class文件进内存,也可以加载别的文件进内存。详情见:Java - 类加载机制
  • 类加载器可以用来加载文件:InputStream getResourceAsStream(String name)
5. 返回父类
  • Class<? super T> getSuperclass()
6. 返回实现的接口
  • Class<?>[ ] getInterfaces()

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:Java - 反射

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