用传统的OOP思想来说,任何一个你写好的且编译过的生成的Class文件,在被类加载器加载后,都会对应有一个java.lang.Class这个类的实例。所以说,每个类的自有的方法属性(类结构)自然被包含在了这个对应的实例上,因此就可以获取到。
public class TestClassLoad {
public static void main(String[] args) throws Exception {
Class<?> clz = Class.forName("A");
Object o = clz.newInstance();
Method m = clz.getDeclaredMethod("hello", null);
m.invoke(o);
}
static class A{
public void hello() {
System.out.println("hello world");
}
}
}
3、4行实现了类的装载、链接和初始化(newInstance方法实际上也是使用反射调用了方法),5、6行实现了从class对象中获取到method对象然后执行反射调用。
反射的原理之一其实就是动态的生成类似于上述的字节码,加载到jvm中运行。
转载自:https://www.cnblogs.com/qingchen521/p/8575761.html