zoukankan      html  css  js  c++  java
  • 反射-反射配置文件

    Class类:

    获取Class对象的三种方式

    方式: 通过Object类中的getObject()方法

    Person p = new Person();

    Class c = p.getClass();

    方式二通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方式简单)。

    Class c2 = Person.class;

    方式三通过Class类中的方法(将类名作为字符串传递给Class类中的静态方法forName即可)。

    Class c3 = Class.forName("Person");

    注意:第三种和前两种的区别

    前两种你必须明确Person类型.

    后面是指定这种类型的字符串就行.这种扩展更强.我不需要知道你的类.我只提供字符串,按照配置文件加载就可以了

     通过反射方式,获取私有构造方法,创建对象 

    获取私有构造方法,步骤如下:

    1. 获取到Class对象

    2. 获取指定的构造方法

    3. 暴力访问, 通过setAccessible(boolean flag)方法

    4. 通过构造方法类Constructor中的方法,创建对象

    public T newInstance(Object... initargs)

     通过反射获取成员变量并使用

    在反射机制中,把类中的成员变量使用类Field表示。可通过Class类中提供的方法获取成员变量:

    返回一个成员变量

    n public Field getField(String name) 获取指定的 public修饰的变量

    n public Field getDeclaredField(String name) 获取指定的任意变量

    返回多个成员变量

    n public Field[] getFields() 获取所有public 修饰的变量

    n public Field[] getDeclaredFields() 获取所有的 变量 (包含私有)

    通过反射,创建对象,获取指定的成员变量,进行赋值与获取值操作

    获取成员变量,步骤如下:

    1. 获取Class对象

    2. 获取构造方法

    3. 通过构造方法,创建对象

    4. 获取指定的成员变量(私有成员变量,通过setAccessible(boolean flag)方法暴力访问)

    5. 通过方法,给指定对象的指定成员变量赋值或者获取值

    u public void set(Object obj, Object value)

    在指定对象obj中,将此 Field 对象表示的成员变量设置为指定的新值

    u public Object get(Object obj)

              返回指定对象obj中,此 Field 对象表示的成员变量的值

     通过反射获取成员方法并使用

    在反射机制中,把类中的成员方法使用类Method表示。可通过Class类中提供的方法获取成员方法:

    返回获取一个方法:

    n public Method getMethod(String name, Class<?>... parameterTypes)

      获取public 修饰的方法

    n public Method getDeclaredMethod(String name, Class<?>... parameterTypes)

      获取任意的方法,包含私有的

    参数1: name 要查找的方法名称; 参数2parameterTypes 该方法的参数类型

    返回获取多个方法:

    n public Method[] getMethods() 获取本类与父类中所有public 修饰的方法

    public Method[] getDeclaredMethods() 获取本类中所有的方法(包含私有的)

    反射配置文件:

    className=com.oracle.demo02.Student
    methodName=study

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Properties;
    public class Demo02 {
     public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
      //创建Properties集合
      Properties pro=new Properties();
      //明确数据源
      FileInputStream fis=new FileInputStream("src/com/oracle/demo02/config.properties");
      //将Properties文件中的数据读取到Properties集合中
      pro.load(fis);
      //获取完整包名+类名
      String className=pro.getProperty("className");
      //获取方法名
      String methodName=pro.getProperty("methodName");
      //获取calss对象
      Class c=Class.forName(className);
      //获取方法对象
      Method m=c.getMethod(methodName);
      //快速创建对象
      Object obj=c.newInstance();
      m.invoke(obj);
     }
    }
  • 相关阅读:
    【转】【Linux】linux awk命令详解
    【转】【Linux】Linux 命令行快捷键
    【转】【Linux】sed命令详解
    【转】【Linux】Linux 下zip包的压缩与解压
    【转】【Linux】grep命令详解
    【转】crontab命令 脚本定时运行
    【转】BAT 批处理脚本 教程
    【MySql】脚本备份数据库
    php的json校验json-schema
    phan—php语法静态检查在windows下的配置
  • 原文地址:https://www.cnblogs.com/nbkls/p/12795511.html
Copyright © 2011-2022 走看看