#1、类加载概述 Class文件由类装载器装载后,在JVM中将造成一份描述Class结构的元信息对象,经过该元信息对象能够获知Class的结构信息:如构造函数,属性和方法等,Java容许用户借由这个Class相关的元信息对象间接调用Class对象的功能。java
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终造成能够被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。数组
java安全沙箱(一)之ClassLoader双亲委派机制安全
#2、类加载工做机制 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要通过如下步骤:框架
(1) 装载:查找和导入Class文件; (2) 连接:把类的二进制数据合并到JRE中; (a)校验:检查载入Class文件数据的正确性; (b)准备:给类的静态变量分配存储空间; (c)解析:将符号引用转成直接引用; (3) 初始化:对类的静态变量,静态代码块执行初始化操做
#3、类加载方式 一、命令行启动应用时候由JVM初始化加载
二、经过Class.forName()方法动态加载
三、经过ClassLoader.loadClass()方法动态加载函数
#4、反射 Java反射机制是在运行状态中,对于任意一个类,都可以知道这个类的全部属性和方法,对于任意一个对象,都可以调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能。工具
主要提供了如下功能: 在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具备的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。ui
利用Reflection APIs取得任何已知名称的类的内部信息,包括:package、 type parameters、 superclass、 implemented interfaces、 inner classes、 outer classes、 fields、 constructors、 methods、 modifiers等,并能够在执行的过程当中,动态生成instances、变动fields内容或唤起methods。.net
// 根据构造函数的参数,返回一个具体的具备public属性的构造函数
Constructor getConstructor(Class[] params)命令行
// 返回全部具备public属性的构造函数数组
Constructor getConstructors()代理
// 根据构造函数的参数,返回一个具体的构造函数(不分public和非public属性)
Constructor getDeclaredConstructor(Class[] params)
// 返回该类中全部的构造函数数组(不分public和非public属性)
Constructor getDeclaredConstructors()
// 根据方法名和参数,返回一个具体的具备public属性的方法 Method getMethod(String name, Class[] params)
// 返回全部具备public属性的方法数组 Method[] getMethods()
// 根据方法名和参数,返回一个具体的方法(不分public和非public属性) Method getDeclaredMethod(String name, Class[] params)
// 返回该类中的全部的方法数组(不分public和非public属性) Method[] getDeclaredMethods()
// 根据变量名,返回一个具体的具备public属性的成员变量 Field getField(String name)
// 返回具备public属性的成员变量的数组 Field[] getFields()
// 根据变量名,返回一个成员变量(不分public和非public属性) Field getDeclaredField(String name)
// 返回全部成员变量组成的数组(不分public和非public属性) Field[] getDelcaredFields()
#5、注解 Annotation实际上是一种接口。经过Java的反射机制相关的API来访问annotation信息。相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。
Annotation是不会影响程序代码的执行,不管annotation怎么变化,代码都始终如一地执行。 Java语言解释器在工做时会忽略这些annotation,所以在JVM中这些annotation是“不起做用”的,只能经过配套的工具才能对这些annontaion类型的信息进行访问和处理。
Annotation与interface的异同:
Annotation类型又与接口有着近之处: