标签:throws web eth 参数 创建对象 ima src 获得 str
定义 : 在运行状态中动态获取的类的信息以及动态调用对象的方法,这种功能称为java语言的反射机制。
定义 : 我们在开发过程中,创建的每一个类也是对象,即类本身是java.lang.Class类的实例对象,我们称这个实例对象为类对象,也就是Class对象。
学习反射前我们先要了解类对象有什么用:
获取Class对象有以下几种方法:
/** * 反射机制demo */ public class Test { public static void main(String args[]) throws Exception { /*获取类对象的三种方法*/ //1、Class.forName()(常用) Class class1 = Class.forName("zhbf.web.Test"); //2、Test.class Class class2 = Test.class; //3、new Test().getClass() Class class3 = new Test().getClass(); /*三种方式创建的类对象调用其中的方法*/ Method method1 = class1.getMethod("printSome",String.class); method1.invoke(class1, "class1"); Method method2 = class2.getMethod("printSome",String.class); method2.invoke(class2, "class2"); Method method3 = class3.getMethod("printSome",String.class); method3.invoke(class3, "class3"); } public static void printSome(String className) { System.out.println(className + "通过反射机制获取方法并调用~"); } }
运行main方法:
步骤:
/*创建对象的流程*/ //1.获取类对象 Class classTest = Class.forName("zhbf.web.Test"); //2.获取构造器对象(入参为选用的构造方法的参数类型) Constructor con = classTest.getConstructor(); //3 获取对象 Test test = (Test) con.newInstance();
常用方法:
/*获取属性并修改*/ ZhbfwebApplicationTests testClass = new ZhbfwebApplicationTests(); //获取ZhbfwebApplicationTests类里访问权限为private的变量name Field field = Class.forName("zhbf.web.ZhbfwebApplicationTests").getDeclaredField("name"); //设置变量可访问(ture) field.setAccessible(true); //上一步设置后,可对private的变量进行从新赋值 field.set(testClass, "wlx"); //打印从testClass对象里面获取的name变量 System.out.println(field.get(testClass));
常用方法:
//调用方法并传入参数 Class class1 = Test.class; Method method = class1.getMethod("printSome", String.class); method.invoke(class1, "class1");
反射的常见应用场景如下:
Spring框架的配置文件一般命名为application.properties,公用的配置一般都写在这里面,为什么要以这种方式来写入公共的信息呢?
场景举例:例如我们需要配置数据库连接信息:
代码:
/** * 反射机制读取文件 */ public class Test { public static void main(String args[]) throws Exception { //从application.properties中获取类名称和方法名称 File springConfigFile = new File("E:\\MyOwnGit\\ZHBF\\ZHBF-WEB\\src\\main\\resources\\application.properties"); //Properties是Java语言的配置文件所使用的类,Xxx.properties为Java 语言常见的配置文件 Properties springConfig = new Properties(); //文件输入流读取文件内容 springConfig.load(new FileInputStream(springConfigFile)); String driverClass = (String) springConfig.get("spring.datasource.driver-class-name"); String url = (String) springConfig.get("spring.datasource.url"); String username = (String) springConfig.get("spring.datasource.username"); String password = (String) springConfig.get("spring.datasource.password"); System.out.println("=====输出数据库配置====="); System.out.printf("驱动类:%s url:%s 用户名:%s 密码:%s", driverClass, url, username, password); } }
输出:
修改配置文件后输出:
标签:throws web eth 参数 创建对象 ima src 获得 str
原文地址:https://www.cnblogs.com/riches/p/12069323.html