【Java 基础】反射

【Java 基础】反射

编译时vs运行时

  1. “编译时”是指,将java代码编译成class文件的时期,不涉及内存。
    “编译时类型”是指,编译时类型由声明该变量时使用的类型决定。

  2. “运行时”是指,java虚拟机执行class文件的时期,涉及内存。
    “运行时类型”是指,运行时类型由实际赋给该变量的对象决定。

  3. 动态绑定
    “编译时”调用的是声明类型的成员方法,“运行时”调用的是实际类型的成员方法。
    注意:调用引用类型的成员变量时,无论是“编译时”还是“运行时”都是调用的实际类型的成员变量

什么是反射?

在运行状态时,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和变量。

Class类

反射的运用

  1. 获取class的方式
    【Java 基础】反射
  2. 创建类对象
    【Java 基础】反射
  3. 调用类对象中方法或变量
    【Java 基础】反射

Android中反射的运用

  1. 通过原始的java反射机制的方式调用资源
    【Java 基础】反射
    【Java 基础】反射
    是不是很屌!!!

  2. Activity启动过程中Activity对象的创建
    在Activity启动类ActivityThread中是这样启动一个Activity:
    【Java 基础】反射
    其中mInstrumentation的newActivity是如何实现的呢?
    【Java 基础】反射

  3. Android中manifest文件加载、layout加载也是通过反射注入到java代码中