黑马程序员技术交流社区

标题: 关于反射的一个应用 [打印本页]

作者: 祁焱    时间: 2011-11-4 23:32
标题: 关于反射的一个应用
刚开始学反射有点蒙,今天找了本书看了看书上有段代码觉得写的很好,现分享一下:
(是一个类的查看器,通过这个查看器可以简单地实现取得类的基本信息)
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("找不到指定类");
        }
    }
}


该贴已经同步到 祁焱的微博
作者: 成杰    时间: 2011-11-4 23:34
很详细,学习了!
作者: 黄健    时间: 2011-11-4 23:38
很好,很强大,谢谢分享
作者: 张强+    时间: 2011-11-5 00:15
学习了,茅塞顿开
作者: 吉许    时间: 2011-11-5 09:34
很详细,这个值得认真学习.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2