Java高级技术-反射

Java高级面试-反射

一、编译时vs运行时

编译时:将Java代码编译成.class文件的过程,不涉及内存

运行时:就是Java虚拟机执行.class文件的过程,用到内存调用

 

编译时类型:编译时类型由声明该变量时使用的类型决定(animal)

运行时类型:运行时类型由实际赋给该变量的对象决定(dog)

Animal animal = new Dog();

 

动态绑定-调用引用实例的方法

1.在编译时,是调用声明类型的成员方法(多态的实现原理),也就是所谓的编译时类型的方法

2.到了运行时,调用的是实际的类型的成员方法,也就是所谓的运行时类型的方法

3.对于调用引用实例的成员变量,无论是编译时还是运行时,均是调用编译时类型的成员变量

 

二、什么是反射

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

 

三、class

.class文件

Class对象

 

四、反射的运用

1.class获取方式

 Java高级技术-反射

 

2.反射在java中的运用

 Java高级技术-反射

 Java高级技术-反射

 Java高级技术-反射

 Java高级技术-反射

 Java高级技术-反射


五、Android中反射的运用

1.通过原始的Java反射机制的方式调用资源

 Java高级技术-反射

Java高级技术-反射

2.Activity的启动过程中Activity的对象的创建