反射---获取Class类的4种方式

来源:互联网 发布:今年的网络流行语 编辑:程序博客网 时间:2024/06/04 17:49

随笔---------------------------------------获取Class类的4种方式-----------------------------------------------------------------------------------------


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() <------- 需要对应的对象有空参的构造器以及对应的调用构造器权限