反射
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象,的方法的功能称为java语言的反射机制。(如在运行状态中(正在运行的服务器,不用关了服务器再修改),修改配置文件,切换不同的数据库)
不用类名也可以获得class对象,this.getClass()方法,不能再static方法中使用。
在java虚拟机规范中,必须开始初始化的情况之一就是调用Class.forName()。而加载、验证、准备必须在初始化之前开始。
调用Class.forName(“xxx.Test1”)后,开始初始化。准备阶段会给static类变量赋值0,初始化阶段会赋值5,这里输出5。
Class.forName()会调用forName0方法,使用默认的类加载器,而forName0是native方法。
native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。
- Class.forName()必须开始初始化
- 可以在Class.forName()传入类加载器classLoader,findClass和loadClass