• JAVA反射练习02


    在配置文件中,配置要的目标类(全类名,该类必须有无参构造方法),和目标方法(名称)(无参方法)。
    通过反射,调用目标类中的目标方法
    假设该类中一定有默认无参构造方法

     1 package reflection;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.IOException;
     6 import java.lang.reflect.InvocationTargetException;
     7 import java.lang.reflect.Method;
     8 import java.util.Properties;
     9 
    10 public class Practice2 {
    11     public static void main(String args[]) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    12         String workingPath=System.getProperty("user.dir");
    13         System.out.println("user.dir:"+workingPath);
    14         //方式一
    15       // callTargetMethod("C:\Users\73906\Desktop\AllinMove\wk4\practice\config.properties");
    16          callTargetMethod("practice\config.properties");
    17          //通过用户路径user.dir找到practice;
    18         //practiceconfig.properties
    19         //表示相遇路径,相对于practice文件下
    20     }
    21     /**
    22      * @param configFilePath  表示配置文件的路径
    23      */
    24     public static void callTargetMethod(String configFilePath) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    25         //需要读取配置文件里面的信息
    26         Properties properties = new Properties();
    27         //创建一个字节输入流
    28         FileInputStream fis = new FileInputStream(configFilePath);
    29         //load方法,指向配置文件的输入流,读取配置文件内容, 并将其春初到Properties 对象中(key-value结构,全部都在)
    30         properties.load(fis);
    31         //通过属性名,获取属性值
    32 
    33 
    34         //1. 读取配置文件信息,将去读取到我们的Properties对象中
    35 
    36         //2. 从Properties对象中,获取指定类的全类名和指定的方法名
    37         String className = properties.getProperty("className");
    38         String methodName = properties.getProperty("methodName");
    39         /*System.out.println(className);
    40         System.out.println(methodName);*/
    41 
    42         //3. 通过全类名,获取全类名所指定的类的,类型信息(通过访问其对应Class)
    43         Class targetClass =  Class.forName(className);
    44 
    45         //4. 利用反射,targetClass中获取,目标方法(Method对象)
    46         Method methodtoRflect = targetClass.getDeclaredMethod(methodName);
    47 
    48         //5. 利用反射,创建目标对象  Constructor对象.newInstance()
    49             TargetClass2 obj = new TargetClass2();
    50             methodtoRflect.setAccessible(true);
    51         //6. Method对象.invoke(目标对象)
    52         int res = (int) methodtoRflect.invoke(obj);
    53         System.out.println("利用反射得到方法运行结果:"+res);
    54 
    55     }
    56 }
    57 
    58 
    59 class TargetClass2 {
    60     private int test() {
    61         int a=886;
    62         return a;
    63     }
    64 
    65 }
  • 相关阅读:
    JQuery EasyUI的datagrid的使用方式总结
    重新=》easyui DataGrid是否可以动态的改变列显示的顺序
    easyui datagrid 列拖动
    MTK平台下Battery驱动分析
    Shell编程——Shell中的数学运算
    新产品为了效果,做的比較炫,用了非常多的图片和JS,所曾经端的性能是非常大的问题,分篇记录前端性能优化的一些小经验。
    iOS内存管理机制解析之MRC手动引用计数机制
    微软下一代站点开发框架:ASP.NET MVC 6 新特性揭秘
    JS简单正则得到字符串中特定的值
    数据结构和算法面试总结
  • 原文地址:https://www.cnblogs.com/debug-the-heart/p/13264091.html
Copyright © 2020-2023  润新知