• Java反射研究(1)


    java.lang.reflect包

    Constructor、Field、Method的父类是AccessibleObject;

    说明:反射主要用于开发框架,即制作框架;


    一、获得Class对象


    Class<?> c = Class.forName("classname");   抛出ClassNotFoundException


    二、获得实现接口


    Class<?> inters[] = c.getInterfaces();

    for(int i=0;i<inters.length;i++){

        System.out.print(inters[i].getName()+" ");        //getName()方法为取得接口名称;

    }


    三、获得父类


    Class<?> superClass  = c.getSuperclass();     //获得父类

    String name  = superClass.getName();    //获得父类名称


    四、取得构造方法


    Constructor cons[] = c.getConstructors();         //获得公开的构造方法

    Constructor dcons[] = c.getDeclaredConstructors();        //获得全部构造方法

    String modifier = Modifier.toString(cons[i].getModifiers());   //获得访问权限

    String name = cons[i].getName();            //获得构造方法名称

    Class<?> params[] = cons[i].getParameterTypes();        //获得参数类型对象


    五、获得Method


    Method ms[] = c.getMethods();                        //返回公共的全部方法,包括继承方法

    Method dms[] = c.getDeclaredMethods();        //返回本类全部方法,不包括继承的方法

    Class<?> rt = ms[i].getReturnType();

    Class<?>params[] = ms[i].getParameterTypes();

    String name = ms[i].getName();

    String modifier = Modifier.toString(ms[i].getModifiers());

    Class<?>ex[] = ms[i].getExceptionTypes();        //获得异常

    String name = ex[i].getName();            //获得异常名称


    六、获得Field


    Field fs[] = c.getFields();                    //获得公共属性,包括继承属性

    Field dfs[] = c.getDeclaredFields();    // 获得本类全部属性

    Class<?> type = fs[i].getType();        //获得属性的类型对象

    String name = fs[i].getName();        //获得属性的名称

    String modifier = Modifier.toString(fs[i].getModifiers());


    七、通过反射创建一个对象

    (1)

    Class<?> c = Class.forName("Person");

    Person p = (Person)c.newInstance();

    (2)

    Constructor con = c1.getConstructor(Class....param);

    Object obj = con.newInstance(Object obj);  //根据构造函数创建一个实例


    八、Constructor创建对象


    Class c = Class.forName("Person");
    Constructor<?> cons[] = c.getConstructors();
    Person p = (Person)cons[0].newInstance("xiazdong",15);

    注:如果调用的构造函数为私有,则需要c.setAccessible(true);



    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    小米范工具系列之二:小米范 web目录扫描器
    小米范工具系列之一:小米范 web查找器
    Layer子域名挖掘机
    unity第一人称
    浏览器的兼容大坑
    java掉系統进程
    java写的服务器,处理多个请求
    java网络练习一
    javaWeb开发原理
    unity传统GUI学习一.
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058126.html
Copyright © 2020-2023  润新知