转载:https://blog.csdn.net/u010613321/article/details/72890092
1.调用运行时类本身的.class属性
Class clazz = String.class;
2.通过运行时类的对象获取
Person p = new Person();
Class clazz = p.getClass();
3.通过Class的静态方法获取:体现反射的动态性
String className = “java.util.commons”;
Class clazz = Class.forName(className);
4.通过类的加载器
String className = “java.util.commons”;
ClassLoader classLoader = this.getClass().getClassLoader();
Class clazz = classLoader.loadClass(className);
扩展:
类加载起分为三种:系统类加载器:ClassLoader.getSystemClassLoader()
扩展类加载器:ClassLoader.getSystemClassLoader().getParent()
引导类加载器(核心库、对象----如String,Object):无法直接获取
配置文件读取:
如在包com.test.java下有配置文件jdbc.properties
内容为:user = root password=pd123
类加载器加载(指定目录如:com.test.java):
ClassLoader classLoader = this.getClass().getClassLoader();
InputStream is = classLoader.getResourceAsStream("com/test/java/jdbc.properties");
Properties properties = new Properties();
properties.load(is);
String user = properties.getProperty("user");
System.out.println(user);
文件字节输入流加载(根目录:src):
//对比FileInputStream获取当前项目根目录下的文件
FileInputStream is = new FileInputStream(new File("jdbc.properties"));
Properties properties = new Properties();
properties.load(is);
String user = properties.getProperty("user");
System.out.println(user);
得到Class 后得到对应对象的实例--------------> class.newInstance() <------- 需要对应的对象有空参的构造器以及对应的调用构造器权限