首页 | 文章中心 | 下载中心 | 本站特供 | 软硬件结合论坛 | 软硬件结合博客 | 
您现在的位置: 中国软硬件结合技术网 >> 文章中心 >> 软件技术 >> VB、JAVA等 >> 正文 用户登录 新用户注册
一个JAVA的类反身实例          【字体:
一个JAVA的类反身实例
作者:佚名    文章来源:    点击数:    更新时间:2005-11-14

import java.lang.reflect.*;
import javax.swing.*;

public class ReflectTest
{
    public static void main(String[] args)
    {
        String name;
        if (args.length > 0)
            name = args[0];
        else
            name = JOptionPane.showInputDialog("输入一个类名:按(java.lang.Double)格式");
       
        try
        {
            Class cl = Class.forName(name);
            Class supercl = cl.getSuperclass(); //获得超类的Class对象
            System.out.println("class "+ name);
            //判断超类是否为空或为Object
            if (supercl != null && supercl != Object.class)
                System.out.println("extends "+ supercl.getName());
           
            System.out.print("\n{\n");
            printConstructors(cl);
            System.out.println();
            printMethods(cl);
            System.out.println();
            printField(cl);
            System.out.println("}");
        }
        //当使用class对象时注意捕获该异常,异常为类型未创建
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
            System.out.println("类型未创建");
        }
        System.exit(0);
    }
   
    /**
     *该方法打印构造器的详细信息
     */
    public static void printConstructors(Class cl)
    {
        //定义构造器数组
        Constructor[] constructors = cl.getDeclaredConstructors();
       
        for (int i = 0; i < constructors.length; i++)
        {
            //将数组元素赋给一个构造器对象
            Constructor constr = constructors[i];
            String name = constr.getName(); //获取构造器名称
            //打印访问修饰符
            System.out.print(Modifier.toString(constr.getModifiers()));
            System.out.print("  "+ name + "(");
           
            /**
             *定义一个参数类型数组该数组是Class对象
             *getParameterTypes()返回该构造器参数类型的数组
             *打印参数类型名称
             */
            Class[] paramTypes = constr.getParameterTypes();
            for (int j = 0; j < paramTypes.length; j++)
            {
                if (j > 0) System.out.print(", ");
                System.out.print(paramTypes[j].getName());
            }
            System.out.println(");");
        }
    }
   
    /**
     *该方法打印方法的详细信息
     */
    public static void printMethods(Class cl)
    {
        Method[] methods = cl.getDeclaredMethods();
       
        for (int i = 0; i < methods.length; i++)
        {
            Method m = methods[i];
            Class retType = m.getReturnType();
            String name = m.getName();
           
            System.out.print(Modifier.toString(m.getModifiers()));
            System.out.print("  "+ retType.getName() +" "+ name + "(");
           
            Class[] paramTypes = m.getParameterTypes();
            for (int j = 0; j < paramTypes.length; j++)
            {
                if (j > 0) System.out.print(", ");
                System.out.print(paramTypes[j].getName());
            }
            System.out.println(");");
        }
    }
   
    /**
     *该方法打印字段的详细信息
     */
    public static void printField(Class cl)
    {
        Field[] fields = cl.getDeclaredFields();
       
        for (int i = 0; i < fields.length; i++)
        {
            Field f =fields[i];
            Class type = f.getType();
            String name = f.getName();
            System.out.print(Modifier.toString(f.getModifiers()));
            System.out.println("  "+ type.getName() +" "+ name + ";");
        }
    }
}

文章录入:Polylove    责任编辑:Polylove 
  • 上一篇文章: Java中的类反射机制

  • 下一篇文章: VB编程的八个优良习惯
  • 发表评论】【告诉好友】【打印此文】【关闭窗口
          最新热点       最新推荐       相关文章
  • Java中的类反射机制

  • 用本地引用提高EJB访问效率

  • 最牛的程序员的自述

  • JSP与EJB

  • J2EE 全面简介

  • 12个最重要的J2EE最佳实践

  • Java 应用程序中的按值传递语…

  • java 技术

  • Java手机游戏编程之MIDP图形…

  • JAVA的部分术语中英文对照

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)