反射API用来生成JVM中的类、接口或则对象的信息。 - Class类:反射的核心类,可以获取类的属性,方法等信息。 - Field类:Java.lang.reflec包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。 - Method类: Java.lang.reflec包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。 - Constructor类: Java.lang.reflec包中的类,表示类的构造方法。
1)Bootstrap ClassLoader启动类加载器
负责加载$JAVA_HOME中jre/lib/里所有的 class(JDK 代表 JDK 的安装目录,下同),或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的类库(如 rt.jar,所有的java.*开头的类均被 Bootstrap ClassLoader 加载)。启动类加载器由 C++ 实现,不是 ClassLoader 子类。无法被 Java 程序直接引用的。
2)Extension ClassLoader扩展类加载器
该加载器由sun.misc.LauncherExtClassLoader实现,负责加载Java平台中扩展功能的一些jar包,包括
JAVA_HOME中jre/lib/.jar或-Djava.ext.dirs指定目录下的 jar 包。即JDK\jre\lib\ext目录中,或者由 java.ext.dirs 系统变量指定的路径中的所有类库(如javax.开头的类),开发者可以直接使用扩展类加载器
3)App ClassLoader应用程序类加载器
该类加载器由 sun.misc.Launcher$AppClassLoader 来实现,负责记载 classpath 中指定的 jar 包及目录中 class,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。
启动类加载器:它使用 C++ 实现(这里仅限于 Hotspot,也就是 JDK1.5 之后默认的虚拟机,有很多其他的虚拟机是用 Java 语言实现的),是虚拟机自身的一部分。 所有其他的类加载器:这些类加载器都由 Java 语言实现,独立于虚拟机之外,并且全部继承自抽象类 java.lang.ClassLoader,这些类加载器需要由启动类加载器加载到内存中之后才能去加载其他的类。 应用程序都是由这三种类加载器互相配合进行加载的,我们还可以加入自定义的类加载器。
实例:Class clazz = String.class;
第三种通过Class类的静态方法:forName(String className)【常用】通过包名类名进行获取;前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException
实例:Classclazz= Class.forName(“java.lang.String”);
第四种通过类加载器来进行加载(其他方式,不做要求);
ClassLoader cl =this.getClass().getClassLoader();
Classclazz4 = cl.loadClass(“类的全类名”);