【Java 基础】反射
编译时vs运行时
“编译时”是指,将java代码编译成class文件的时期,不涉及内存。
“编译时类型”是指,编译时类型由声明该变量时使用的类型决定。“运行时”是指,java虚拟机执行class文件的时期,涉及内存。
“运行时类型”是指,运行时类型由实际赋给该变量的对象决定。动态绑定
“编译时”调用的是声明类型的成员方法,“运行时”调用的是实际类型的成员方法。
注意:调用引用类型的成员变量时,无论是“编译时”还是“运行时”都是调用的实际类型的成员变量。
什么是反射?
在运行状态时,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和变量。
Class类
反射的运用
- 获取class的方式
- 创建类对象
- 调用类对象中方法或变量
Android中反射的运用
通过原始的java反射机制的方式调用资源
是不是很屌!!!Activity启动过程中Activity对象的创建
在Activity启动类ActivityThread中是这样启动一个Activity:
其中mInstrumentation的newActivity是如何实现的呢?Android中manifest文件加载、layout加载也是通过反射注入到java代码中