专题1:反射机制

1.程序的运行过程

专题1:反射机制

 

2.ClassLoader的类加载机制:①并非一次性加载  ②运行期间动态加载

3.使用-verbose:class命令观察class的load过程

4.static静态语句块在class被load完成后被调用一次(仅一次),动态语句块每new一次执行一次,等同构造方法中的语句

5.JDK内置的ClassLoader

专题1:反射机制

 

6.bootstrap class loader : 载入其他的classloader和最核心的类,使用操作系统本地语言(native language)编写,没有名字(其他class load都是用java写的)

7. 使用 类名.class获取Class,使用类名.class.getClassLoader()获取ClassLoader

8.使用 类名.class.getClassLoader().getClass().getName()来获取类装载器的名字

9.ClassLoader可以自己创建(继承抽象类ClassLoader)

 

10.class loader对象(!)之间的层次关系(非继承关系)

专题1:反射机制

下层classloader对象有一个引用parent指向上层对象,可以使用getParent()方法获得引用parent。bootstrap class loader不能被指向,因为它是C++编写的,但在逻辑上是被ext class loader指向的

11.加载一个class的过程:底层classloader询问上层classloader是否已经加载该class,其上层classloader继续向更上层classloader询问(如此向上),若已加载则不重复加载提高了安全性(如自己写的String.class不会被重复加载)

12.在ClassLoader的角度来看,每个code segment中的.class都是一个Class对象

13.Object的方法getClass()可以获得该类对象(等同于类名.class)

14.Class的getClassLoader()方法获得装载这个类ClassLoader

15.通过java.lang.reflect包中的Field(属性)和Method(方法)两个类可以将类对象中的属性和方法也看做对象

16.通过Class.forName(类名)来载入一个类,这个静态方法返回这个类的Class对象,通过Class对象的newInstance()方法创建出该类的实例

17.Class对象的getMethods()方法可以获取类中的方法对象,返回Method数组

18.Method对象的常用方法

  getName()  获取方法名

     invoke(调用该方法的对象,方法参数,方法参数,...)  执行该方法

   getReturnType()  获取该方法的返回值类型(返回Class类型)

   getParameterTypes()  获取该方法的各个参数类型(返回Class类型数组)

上一篇:类加载子系统


下一篇:自定义类加载器classLoader