JAVA类加载流程
Bootstrap ClassLoader 最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。
Extention ClassLoader 扩展的类加载器,加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
Appclass Loader也称为SystemAppClass 加载当前应用的classpath的所有类。
public class ReflectCase {
static class Proxy{
public void run(){
System.out.println("run");
}
}
public static void main(String[] args) throws Exception {
Proxy target = new Proxy();
//获取指定方法名和参数的方法
Method method = Proxy.class.getDeclaredMethod("run");
method.invoke(target);
}
}
public class DumpMethods {
public static void main(String[] args) {
try{
Class c = Class.forName(args[2]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println(m[i].toString());
}
}catch (Throwable e){
e.printStackTrace();
}
}
}
//使用Class.forName载入指定的类,然后调用getDeclaredMethods来获取这个类中定义的方法列表.
//java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类
使用Method类要遵循的三个步骤
- 1.获取想要操作的类的java.lang.Class对象
获取一个Class对象的三种方法
Class c = Class.forName("java.lang.String")
Class c = int.class
Class c = Integer.TYPE
- 2.调用诸如 getDeclaredMethods的方法,取得该类中定义的所有方法的列表
- 3.使用relection API来操作这些信息
例如:
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.print(m[0].toString())
PREVIOUSJava单例模式
NEXTJava debug的使用