• java反射系列二


     一.Class类

    package reflect;
    /*
    *java.lang.class是反射的源头
    *我们创建了一个类,通过编译(javac.exe),生成对应的.class文件,之后我们使
    *用java.exe加载(JVM的类加载器完成的)此.class文件
    *此.class文件加载到内存以后,就是一个运行时类存在缓存区,那么这个运行时
    *类本身就是一个Class的实例
    *1.每个运行时类只能加载一次
    *2.有了Class的实例以后,我们才可以进行如下的操作
    *  1)创建对应的运行时类的对象
    *  2)获取对应的运行时类的完整结构(属性.方法.构造器.内部类.父类.所在的包.异常...)
    *  3)调用对应的运行时类的指定结构(属性.方法.构造器)
    *  4)反射的应用:动态代理
    */
    public class TestReflections {
        public static void main(String[] args) throws ClassNotFoundException {
            TestReflections t = new TestReflections();
             t.test();    
        }
        //如何获取Class的实例(掌握三种)
        public void test() throws ClassNotFoundException {
            //1.调用运行时类本身的.class属性
            Class cla = Person.class;        
            //getName() 返回由 类对象表示的实体(类,接口,数组类,原始类型或空白)的名称,作为 String 。        
            System.out.println(cla.getName());
            
            //2.通过运行时类的对象获取
            Person p = new Person();
            Class claz = p.getClass();
            System.out.println(claz.getName());
            
            //3.通过class的静态方法获取
            String className = "reflect.Person";
            //forName(String className)返回与给定字符串名称的类或接口相关联的 类对象。
            Class clazz = Class.forName(className);
            System.out.println(clazz);
            
            //4.通过类的加载器
            //getClassLoader() 返回类的类加载器。
            ClassLoader classloader = this.getClass().getClassLoader();
            //loadClass(String name)用指定的binary name 加载课程
            Class clazzs = classloader.loadClass(className);
            System.out.println(clazzs.getName());
        }
    }

  • 相关阅读:
    sql分页 sql server,oracle,db2,mysql
    部分SQL优化
    javascript &&和||的其他用法
    socket 套接字
    网络协议篇
    异常处理
    元类type 反射 函数与方法 双下方法
    私有 实例方法 类方法 静态方法 属性 issubclass isinstance区别
    面向对象的三大特性 鸭子类型 类的约束 super的深度剖析
    继承
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10332230.html
Copyright © 2020-2023  润新知