通过读取文件获得的字符串一旦写到Class.forName里面便会报错

我想通流读取properties文本里面的value,然后将value放到Class.forName()中,以此实现修改文本内容便可创建不同的对象,但是当我将通过properties.getProperty("ClassName")获取到的value放到Class.forName()中便会报错。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Test03 {
    public static void main(String[] args) throws Exception {

        //创建流通道
        FileInputStream fis = new FileInputStream("E:\\exe\\Class.properties");

        //创建Properties MAP集合
        Properties properties = new Properties();
        properties.load(fis);

        //通过key获取value
        String s1= properties.getProperty("ClassName");
        System.out.println(s1);//"com.test.ClassTest.Test02"

        //再用反射通过value获取对象
        Class aClass = Class.forName(s1);
        Object o = aClass.newInstance();
        System.out.println(o);

        //关闭流
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

img

img


properties文件的这个不要加双引号

系统说没找到test02这个class,所以报错了啊

类加载器分为三种
根类加载器:加载“jdk/lib/rt.jar”
扩展类加载器:加载"jdk/lib/ext/"目录下的包
系统类加载器:加载"classpath"目录下的包
自定义类加载器:自己设置加载啥

而你,没有自定义,所以jvm就去前面三个类加载器加载的位置找你给的类,结果没找到,所以报错了。