A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 祁焱 黑马帝   /  2011-11-4 23:32  /  2296 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚开始学反射有点蒙,今天找了本书看了看书上有段代码觉得写的很好,现分享一下:
(是一个类的查看器,通过这个查看器可以简单地实现取得类的基本信息)
import java.lang.reflect.*;

public class SimpleClassViewer {
     public static void main(String[] args) {
        try {
            Class c = Class.forName(args[0]);
            // 取得包代表对象
            Package p = c.getPackage();
            
            System.out.printf("package %s;%n", p.getName());
            
            // 取得类型修饰,像是class、interface
            int m = c.getModifiers();
            
            System.out.print(Modifier.toString(m) + " ");
            // 如果是接口
            if(Modifier.isInterface(m)) {
                System.out.print("interface ");
            }
            else {
                System.out.print("class ");
            }
            
            System.out.println(c.getName() + " {");

            // 取得声明的域成员代表对象
            Field[] fields = c.getDeclaredFields();
            for(Field field : fields) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                    Modifier.toString(field.getModifiers()));
                // 显示类型名称
                System.out.print(" " +
                    field.getType().getName() + " ");
                // 显示域成员名称
                System.out.println(field.getName() + ";");
            }

            // 取得声明的构造函数代表对象            
            Constructor[] constructors =
                            c.getDeclaredConstructors();
            for(Constructor constructor : constructors) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                     Modifier.toString(
                       constructor.getModifiers()));
                // 显示构造函数名称
                System.out.println(" " +
                      constructor.getName() + "();");
            }
            // 取得声明的方法成员代表对象            
            Method[] methods = c.getDeclaredMethods();
            for(Method method : methods) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                     Modifier.toString(
                              method.getModifiers()));
                // 显示返回值类型名称
                System.out.print(" " +
                     method.getReturnType().getName() + " ");
                // 显示方法名称
                System.out.println(method.getName() + "();");
            }
            System.out.println("}");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("没有指定类");
        }
        catch(ClassNotFoundException e) {
            System.out.println("找不到指定类");
        }
    }
}


该贴已经同步到 祁焱的微博

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 谢谢分享。

查看全部评分

4 个回复

倒序浏览
很详细,学习了!
回复 使用道具 举报
很好,很强大,谢谢分享
回复 使用道具 举报
学习了,茅塞顿开
回复 使用道具 举报
很详细,这个值得认真学习.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马