博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java获取类的信息
阅读量:7070 次
发布时间:2019-06-28

本文共 4216 字,大约阅读时间需要 14 分钟。

v关键技术剖析

1.java.lang.reflect包实现了java的反射机制,在使用反射机制时,需要导入该包。

2.Class类的forName方法能够根据类名加载类,获得类的Class对象。

Class类的getSuperclass方法获得父类的Class对象;getDeclaredFields方法获取类声明的属性,返回的是一组java.lang.Field对象;getDeclaredConstructors方法获得类的构造方法,返回的是一组java.lang.reflect.Constructor对象;getMethods方法获得类的方法,返回的是一组java.lang.reflect.Method的对象。

3.java.olang.reflect.Field描述类声明的属性。getModifiers方法获得属性的访问修饰符;getType方法获得属性的类型;getName方法获得属性名。

4.java.lang.reflect.Constructor描述类的构造方法。getModifiers方法获得构造方法的访问修饰符;getName方法获得方法名,getParameterTypes获得构造方法的参数类型;getExCeptionTypes方法获得构造方法声明的异常。

5.java.lang.reflect.Method描述类声明的方法。getModifiers方法获得方法的访问修饰符;getReturnType方法返回方法的返回类型;getName方法获得方法名;getParameterTypes方法案获得方法的参数类型;getExceptionTypes方法获得声明的异常。

package com.test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Main{        /*获取类的声明*/    private String getClassStatement(Class c){        StringBuffer buf = new StringBuffer();        if(c.getName().equals("java.lang.Object")){            buf.append("public class Object {");            return buf.toString();        } else {            //得到该类的父类名            String superName = c.getSuperclass().getName();            buf.append("public class ").append(c.getName()).append(" extends ").append(superName).append(" {");            return buf.toString();        }    }        /*获取类的属性*/    private String getFields(Class c){        StringBuffer buf = new StringBuffer();        Field[] fields = c.getDeclaredFields();        for(Field field : fields){            //获取属性的访问修饰符            //Modifier的一些信息 http://www.it165.net/pro/html/201309/7203.html            buf.append("    ").append(Modifier.toString(field.getModifiers())).append(" ");            Class
type = field.getType(); buf.append(type.getName()).append(" "); buf.append(field.getName()).append(";\n"); } return buf.toString(); } /*获取类的所有构造方法*/ private String getConstructors(Class c){ StringBuffer buf = new StringBuffer(); //获取类的构造方法 Constructor
[] cons = c.getDeclaredConstructors(); for(Constructor con : cons){ //获取构造方法的访问修饰符 buf.append(" ").append(Modifier.toString(con.getModifiers())).append(" "); //获取构造方法的名称 buf.append(con.getName()).append("("); //获取构造方法的参数 Class
[] paramType = con.getParameterTypes(); for(int i=0; i
[] excepTypes = con.getExceptionTypes(); for(int i=0; i
returnType = method.getReturnType(); buf.append(returnType.getName()).append(" "); buf.append(method.getName()).append(" (");//获取方法的名称 //获取方法的参数类型 Class
[] paramTypes = method.getParameterTypes(); for(int i=0; i
[] excepTypes = method.getExceptionTypes(); for(int i=0; i
c = Class.forName("com.test.Main"); buf.append("/*类的声明*/\n"); buf.append(getClassStatement(c)); buf.append("\n"); buf.append(" /*字段*/\n"); buf.append(getFields(c)); buf.append(" /*构造器*/\n"); buf.append(getConstructors(c)); buf.append(" /*方法*/\n"); buf.append(getMethods(c)); buf.append("}\n"); System.out.println(buf.toString()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ new Main().getClassMessage(); }}

v输出结果

/*类的声明*/public class com.test.Main extends java.lang.Object {    /*字段*/    /*构造器*/    public com.test.Main();    /*方法*/    private java.lang.String getClassStatement (java.lang.Class);    public void getClassMessage ();    public static void main ([Ljava.lang.String;) throws java.lang.Exception;    private java.lang.String getConstructors (java.lang.Class);    private java.lang.String getFields (java.lang.Class);    private java.lang.String getMethods (java.lang.Class);}
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/5132943.html,如需转载请自行联系原作者
你可能感兴趣的文章
一起谈.NET技术,asp.net控件开发基础(11)
查看>>
美军事基地被黑客入侵 UFO资料惊现
查看>>
Linux命令行技巧zz
查看>>
android 模拟器使用SDcard
查看>>
android去除标题栏和状态栏
查看>>
[转]利用 NPOI 變更字體尺寸及樣式
查看>>
eval解析JSON字符串的一个小问题
查看>>
jquery简单原则器(匹配除了指定选择器之外的元素 selector 表示选择器)
查看>>
update使用inner join
查看>>
Vue2.x中的父子组件相互通信
查看>>
多种替身邮方法总结!
查看>>
沟通比文档更有力
查看>>
Ural_1073. Square Country(DP)
查看>>
asp.net的10个提升性能或扩展性的秘密(二)
查看>>
[转载]我的WCF之旅(3):在WCF中实现双工通信
查看>>
Jquery中替换节点的方法replaceWith()和replaceAll()
查看>>
谈谈android模拟器和真机的差别
查看>>
upx最新壳脱壳测试
查看>>
[原创]手写一个PE文件
查看>>
安装php xdebug扩展
查看>>