博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.lang.reflection打印一个类的全部信息
阅读量:7006 次
发布时间:2019-06-27

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

package com.ljy.chapter5;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Scanner;/** * This program uses reflection to print all features of a class. * @author LIAO JIANYA * */public class ReflectionTest{    public static void main(String[] args)     {        //read class name from command time args or user input        String name;        if(args.length > 0)name = args[0];        else        {            Scanner in = new Scanner(System.in);            System.out.println("Enter class name (e.g java.util.Date): ");            name = in.next();        }        try        {            //print class name and superclass name(if != Object)            Class cl = Class.forName(name);            Class supercl = cl.getSuperclass();            String modifiers = Modifier.toString(cl.getModifiers());            if(modifiers.length() > 0)                System.out.print(modifiers + " ");            System.out.print("class " + name);            if(supercl != null && supercl != Object.class)                System.out.print(" extends " + supercl.getName());                        System.out.print("\n{\n");            printConstructors(cl);            System.out.println();            System.out.println("----------------------------------------");            printMethods(cl);            System.out.println();            System.out.println("----------------------------------------");            printFields(cl);            System.out.println("}");        }                catch (ClassNotFoundException e)        {            e.printStackTrace();        }                System.exit(0);    }        /**     * Prints all constructor of a class     * @param cl a class     */    public static void printConstructors(Class cl)    {        Constructor[] constructors = cl.getDeclaredConstructors();        for(Constructor c : constructors)        {            String name = c.getName();            System.out.print("    ");            String modifiers = Modifier.toString(c.getModifiers());            if(modifiers.length() > 0)                System.out.print(modifiers + " ");            System.out.print(name + "(");                        //print parameter types            Class[] paramTypes = c.getParameterTypes();            for(int j = 0; j < paramTypes.length; j++)            {                if(j > 0)                    System.out.print(", ");                System.out.print(paramTypes[j].getName());            }                        System.out.println(");");                    }            }    /**     * Prints all methods of a class     * @param cl a class     */        public static void printMethods(Class cl)    {        Method[] methods = cl.getDeclaredMethods();        for(Method m : methods)        {            Class retType = m.getReturnType();            String name = m.getName();                        System.out.print("   ");            //print modifiers, return type and method name            String modifiers = Modifier.toString(m.getModifiers());            if(modifiers.length() > 0)                System.out.print(modifiers + " ");            System.out.print(retType.getName() + " " + name + "(");                        //print parameter types            Class[] paramTypes = m.getParameterTypes();            for(int j = 0; j < paramTypes.length; j++)            {                if(j > 0)                    System.out.print(", ");                System.out.println(paramTypes[j].getName());            }            System.out.println(");");                        }    }        /**     * Prints all fields of a class     * @param cl a class     */        public static void printFields(Class cl)    {        Field[] fields = cl.getDeclaredFields();                for(Field f : fields)        {            Class type = f.getType();            String name = f.getName();            System.out.print("   ");            String modifiers = Modifier.toString(f.getModifiers());            if(modifiers.length() > 0)                System.out.print(modifiers + " ");            System.out.println(type.getName() + " " + name + ";");        }    }}

这个程序将提醒用户输入类名,然后输出类中所有的方法和构造器的签名,以及全部域名。

输出结果:

Enter class name (e.g java.util.Date): java.lang.Doublepublic final class java.lang.Double extends java.lang.Number{    public java.lang.Double(double);    public java.lang.Double(java.lang.String);----------------------------------------   public boolean equals(java.lang.Object);   public static java.lang.String toString(double);   public java.lang.String toString();   public int hashCode();   public static native long doubleToRawLongBits(double);   public static long doubleToLongBits(double);   public static native double longBitsToDouble(long);   public int compareTo(java.lang.Double);   public volatile int compareTo(java.lang.Object);   public byte byteValue();   public short shortValue();   public int intValue();   public long longValue();   public float floatValue();   public double doubleValue();   public static java.lang.Double valueOf(double);   public static java.lang.Double valueOf(java.lang.String);   public static java.lang.String toHexString(double);   public static int compare(double, double);   public static boolean isNaN(double);   public boolean isNaN();   public static boolean isInfinite(double);   public boolean isInfinite();   public static double parseDouble(java.lang.String);----------------------------------------   public static final double POSITIVE_INFINITY;   public static final double NEGATIVE_INFINITY;   public static final double NaN;   public static final double MAX_VALUE;   public static final double MIN_NORMAL;   public static final double MIN_VALUE;   public static final int MAX_EXPONENT;   public static final int MIN_EXPONENT;   public static final int SIZE;   public static final java.lang.Class TYPE;   private final double value;   private static final long serialVersionUID;}

在java.lang.reflect包中有三个类Field、Method和Constructor分别是用于描述类的域、方法和构造器。

这三个类都有一个叫做getName的方法——用来返回项目的名称;getModifiers的方法——返回一个整型数值,用不同的位开关描述public和static这样的修饰符使用情况。

Field类有一个getType方法——用来返回描述域所属类型的Class对象。

Class类中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造数组,其中包括超类的公有成员。

Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将返回类中声明的全部域、方法和构造器,其中包括私有和受保护成员,但不包括超类的成员。

 

转载于:https://www.cnblogs.com/Andya/p/5647436.html

你可能感兴趣的文章
TEST
查看>>
OpenCV stereo matching BM 算法
查看>>
《Cocos2D权威指南》——3.7 Cocos2D中的单例
查看>>
叫卖“服务” 太阳能光热产品供应商转型
查看>>
芬兰计划以攻击者姿态参与网络战军备竞赛
查看>>
报告|我国47%的县级以上城市提出智慧城市方案
查看>>
SaaS与AI,云客服的天平到底应该偏向哪边?
查看>>
光伏产品出口续增仍要迈坎
查看>>
Silverlight+WCF 新手实例 象棋 棋子移动-吃子(五)
查看>>
供过于求:中国出口印度太阳能市场萎缩
查看>>
光伏组件竖排VS横排布置 谁的占地面积大?
查看>>
伊顿与智慧城市 未来亚洲之城——绿色智慧城市
查看>>
MDataTable属性RecordsAffected新应用:WebService与Json交互的记录总数
查看>>
打造政务服务大数据联盟
查看>>
block循环引用解决
查看>>
Spark机器学习4·分类模型(spark-shell)
查看>>
PostgreSQL 10.0 preview 功能增强 - 分区表(list default)
查看>>
JPA学习笔记-JPA进阶
查看>>
AR+LBS线下社交游戏尝试
查看>>
开发者论坛一周精粹(第十八期) :第一期阿里云高校工作坊申办启动
查看>>