[java]反射的一个例子🌰

获取类实例

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");
    }
}
原文地址:https://www.cnblogs.com/iiiiiher/p/12807945.html