zoukankan      html  css  js  c++  java
  • [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");
        }
    }
    
  • 相关阅读:
    读《奇点临近》
    C++中rand()函数的用法
    第四届蓝桥杯 c/c++真题
    ACM做题过程中的一些小技巧
    树状数组
    go单元测试进阶篇
    浓缩的才是精华:浅析GIF格式图片的存储和压缩
    腾讯IVWEB团队:WebRTC 点对点直播
    Mongodb Geo2d索引原理
    Unity编译Android的原理解析和apk打包分析
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12807945.html
Copyright © 2011-2022 走看看