公共函数的调用 Class<A> clazz = A.class;
通过反射创建对象 获取函数对象 try { Method method = clazz.getMethod("m1");// 形参类型 Object o = clazz.newInstance();// JDK9 中过时了
调用空参函数 Object invoke = method.invoke(o);// 实参 System.out.println("invoke = " + invoke);
调用 int 型 函数 method = clazz.getMethod("m1", int.class);
JDK9开始 Constructor<A> constructor = clazz.getConstructor(); A a = constructor.newInstance();
invoke = method.invoke(a, 3306);
System.out.println("invoke = " + invoke);
String + int method = clazz.getMethod("m1", String.class, int.class);
constructor = clazz.getConstructor(); a = constructor.newInstance();
invoke = method.invoke(a, "勤能补拙", 3306);
System.out.println("invoke = " + invoke);
int + String 有返回值 method = clazz.getMethod("m1", int.class, String.class);
constructor = clazz.getConstructor(); a = constructor.newInstance();
nvoke 函数是来调用函数的,它的返回值就是函数的返回值,如果函数没有返回值或者被调用函数返回null,invoke函数也返回null invoke = method.invoke(a, 3306, "业精于勤");
A 中私有函数的调用 Class<?> aClass = A.class;
try { // getMethod 函数只能获取 public 修饰的函数 // Method m2 = aClass.getMethod("m2");// NoSuchMethodException: com.msr.lesson03.A.m2() Method m2 = aClass.getDeclaredMethod("m2");
// 赋予访问权限 m2.setAccessible(true);
Object invoke = m2.invoke(aClass.getConstructor().newInstance()); System.out.println("invoke = " + invoke); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) {// 没有访问权限的意思 e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
静态创建对象就是 使用 new 关键字创建 动态创建学生对象
静态创建对象就是 使用 new 关键字创建 : 要求类必须存在. 动态创建对象
Word word = new Word();
word.start();
Excel excel = new Excel() ;
excel.start();
// 创建文件的内存对象 Properties properties = new Properties();
// 借助资源流加载文件 ClassLoader classLoader = Test02.class.getClassLoader();// 获取类加载器 InputStream inputStream = classLoader.getResourceAsStream("wps.properties");// 默认路径 是 项目的 src 目录下 // 将硬盘文件和内存对象关联起来 try { properties.load(inputStream); // 读取硬盘文件内容 String value = properties.getProperty("className"); String[] split = value.split(";");
for (String className : split) { Class<?> clazz = Class.forName(className); WPS wps = (WPS) clazz.getConstructor().newInstance(); wps.start(); }
泛型只在编译时期有效
标签:反射,String,invoke,method,m2,clazz,class From: https://www.cnblogs.com/yuec5067/p/17931336.html