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

本文共 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

你可能感兴趣的文章
Quidway S系列交换机
查看>>
微服务
查看>>
Bootstrap3 代码-内联代码
查看>>
[转载] SQL进行排序、分组、统计的10个新技巧
查看>>
LeetCode-Flip Game II
查看>>
7天学会node
查看>>
Git 命令
查看>>
指数、对数以及根式的运算【初级中阶辅导】
查看>>
EXT中创建遮罩层的类LoadMask
查看>>
jupyter扩展插件Nbextensions使用
查看>>
Jav解析xml
查看>>
linux学习篇(一)
查看>>
Python网络数据采集PDF
查看>>
topcoder srm 662 div1
查看>>
(备忘)获取调用者类名的一种方法
查看>>
26. Remove Duplicates from Sorted Array(代码思路新奇)
查看>>
思维体操: HDU1287破译密码
查看>>
How To Partition Existing Table Using DBMS_Redefinition
查看>>
微信“跳一跳”高分技巧
查看>>
Codeforces 855C - Helga Hufflepuff's Cup
查看>>