2、反射-获取Class类的实例的4中方式&ClassLoader加载文件

如何获取Class的实例

1、调用运行时类的本身的.class属性

 Class clazz = Person.class;
Person person = clazz.newInstance();

2、通过运行时类的对象

        Person person = new Person();

        Class clazz = person.getClass();

3、通过Class的静态方法

Class clazz = Class.forName("com.bean.Person");

通过的是类的路径

4、类加载器

        ClassLoader classLoader = this.getClass().getClassLoader();
        Class<?> clazz = classLoader.loadClass("com.bean.Person");

类的编译过程

类的加载过程

 ClassLoader

 

 ClassLoader

 @Test
    public void test3(){
        //系统类加载器
        ClassLoader loader1 = ClassLoader.getSystemClassLoader();
        System.out.println(loader1);//sun.misc.Launcher$AppClassLoader@18b4aac2

        ClassLoader parent = loader1.getParent();
        System.out.println(parent);//sun.misc.Launcher$ExtClassLoader@a09ee92

        Class clazz = Person.class;
        ClassLoader classLoader = clazz.getClassLoader();
        System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

    }

ClassLoader能做什么

 用于加载文件

    @Test
    public  void test4() throws IOException {

        //创建ClassLoader
        ClassLoader loader = this.getClass().getClassLoader();
        InputStream in = loader.getResourceAsStream("com\\bean\\jdbc.properties");
        
        //创建Properties
        Properties properties = new Properties();
        properties.load(in);
Object user
= properties.get("user"); Object password = properties.get("password"); System.out.println(user); System.out.println(password); }

 

使用流之后需要 在工程下创建文件

使用ClassLoader可以在包下创建文件

猜你喜欢

转载自www.cnblogs.com/Mrchengs/p/10903052.html