zoukankan      html  css  js  c++  java
  • Java反射机制

    Java -- 浅入Java反射机制
    http://www.cnblogs.com/wjtaigwh/p/6640748.html

    API中给我们提供了一下方法

    getName():获得类的完整名字。
    getFields():获得类的public类型的属性。
    getDeclaredFields():获得类的所有属性。
    getMethods():获得类的public类型的方法。
    getDeclaredMethods():获得类的所有方法。
    getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
    getConstructors():获得类的public类型的构造方法。
    getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
    newInstance():通过类的不带参数的构造方法创建这个类的一个对象。


    获取类中全部属性

    Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");
    //获取本类中的全部属性
    Field[] field = clazz.getDeclaredFields();
    for (int i = 0; i < field.length; i++) {
    //权限修饰符
    String priv = Modifier.toString(field[i].getModifiers());
    //属性类型
    Class<?> type = field[i].getType();
    System.out.println("修饰符:" + priv + ",属性类型:" + type.getName());

    }
    //获取实现的接口或者父类的属性
    Field[] fild1 = clazz.getFields();

    for (int i = 0; i <fild1.length ; i++) {
    int mo = fild1[i].getModifiers();
    String priv = Modifier.toString(mo);
    // 属性类型
    Class<?> type = fild1[i].getType();
    System.out.println(priv + " " + type.getName() + " " + fild1[i].getName() + ";");
    }
    获取类中的全部方法
    Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");
    Method method[] = clazz.getMethods();
    for (int i = 0; i < method.length; i++) {
    Class<?> returnType = method[i].getReturnType();
    Class<?> para[] = method[i].getParameterTypes();
    int temp = method[i].getModifiers();
    System.out.println(method[i].getName() + "," + returnType.getName() + "," + Modifier.toString(temp));
    for (int j = 0; j < para.length; j++) {
    System.out.print(para[j].getName());
    }
    }


    通过反射调用类中的方法

    Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");
    Method method = clazz.getMethod("getAge");

    method.invoke(clazz.newInstance());

    method = clazz.getMethod("setAge", int.class);
    method.invoke(clazz.newInstance(), 20);

    通过反射操作类中的属性(包括私有属性)

    Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");
    User user = (User) clazz.newInstance();
    Field field = clazz.getDeclaredField("age");
    field.setAccessible(true);
    field.set(user, 50);
    System.out.print(field.get(user));

  • 相关阅读:
    2013-1-17 打开/关闭默认共享的命令
    2013-1-1遍历文件夹,改名文件
    2012-07-02 无边框最大化窗体
    2012-04-12 工具箱中添加自定义控件的方法
    2012-4-2 通过MdiParent设置窗体最前
    2012-2-7列举及终止进程
    python with as 以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。
    终于好了 ipython 里执行dos命令 显示结果却显示在kernel界面里 搞定了
    Win7开启远程桌面
    哪位有方法把 dd/mm/yyyy的字符串 格式化成yyyy-mm-dd
  • 原文地址:https://www.cnblogs.com/bluestorm/p/9448955.html
Copyright © 2011-2022 走看看