• 反射的源头,Class类的实例和ClassLoader


    java.lang.Class:是反射的源头。创建一个类,通过编译,生成.class文件。之后使用java.exe加载(JVM的类加载器)加载此.class文件。加载到内存以后,就是一个运行时类,存在缓冲区。那么这个运行时类本身就是一个Class的实例。

    1. 一个运行时类只加载一次

    2. 有了Class的实例以后,才可以进行如下操作

    1)创建对应的运行时类的对象

    2)获取对应的运行时类的完整结构(属性,方法,构造器…)

    3)获取对应的运行时类的指定结构(属性,方法,构造器)

    4)反射的应用:动态代理

    获取Class类的实例

    package lianxi1;
    
    import org.junit.Test;
    
    public class TestReflection {
    //如何获取Class的实例
    @Test
      public void test1() throws ClassNotFoundException{
        //1.通过运行时类本身的class属性
        Class clazz1 = Person.class;
        System.out.println(clazz1.getName());
        //2.通过运行时类的对象获取
        Person p = new Person("foj",23);
        Class clazz2 = p.getClass();
        System.out.println(clazz2.getName());
        //3.通过Class的静态方法获取,体现反射的动态性
        String s1 = "lianxi1.Person";
        Class clazz3 = Class.forName(s1);
        //clazz3.newInstance();
        System.out.println(clazz3.getName());
        //4.通过类的加载器
        ClassLoader classloader = this.getClass().getClassLoader();
        Class clazz4 = classloader.loadClass(s1);
        System.out.println(clazz4.getName());
        
    }
    }

    读取配置文件:

    @Test
      public void test2() throws IOException{
        //1.读取包中配置文件
        ClassLoader classloader = this.getClass().getClassLoader();
        InputStream is = classloader.getResourceAsStream("lianxi1\jdbc.file1");
        //2.读取工程下的配置文件
    //    InputStream is = new FileInputStream(new File("jdbc.file2"));
        Properties p = new Properties();
        p.load(is);
        String acc = p.getProperty("account");
        String pwd = p.getProperty("password");
        System.out.println(acc+" "+pwd);
    }
  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/yjtm53/p/4165373.html
Copyright © 2020-2023  润新知