获取类实例
Class<A> aClass = A.class;
Class<? extends A> aClass1 = new A().getClass();
Class<?> aClass2 = Class.forName("com.atguigu.test.A");
Class<?> aClass3 = A.class.getClassLoader().loadClass("com.atguigu.test.A");
//额外地: 类加载器还可以读取文件
InputStream resourceAsStream = A.class.getClassLoader().getResourceAsStream("jdbc.properties"); //注: 而不是A.class.getResourceAsStream(),会报空指针错误.
获取类加载器
//类的加载顺序: 核心--扩展--用户自定义
System.out.println(A.class.getClassLoader());//sun.misc.Launcher$AppClassLoader@18b4aac2
System.out.println(A.class.getClassLoader().getParent());//sun.misc.Launcher$ExtClassLoader@66d3c617
System.out.println(A.class.getClassLoader().getParent().getParent());//null
//String是核心类
System.out.println(String.class.getClassLoader());//null
类自身方法反射调用其他方法
import java.lang.reflect.Method;
public class DemoTest {
public static void main(String[] args) throws Exception {
Person person = new Person();
person.show("say", "m1");
}
}
class Person {
public void show(String s, String args) throws Exception {
Method method = this.getClass().getDeclaredMethod(s, String.class);
method.invoke(this, args);
System.out.println(args);
}
public void say(String name) {
System.out.println(name);
System.out.println("person say");
}
}