java.lang.reflection打印一个类的全部信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.reflection打印一个类的全部信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5237字,纯文字阅读大概需要8分钟。
内容图文
![java.lang.reflection打印一个类的全部信息](/upload/InfoBanner/zyjiaocheng/1049/1438f36d374a4ffdb1339fd1bad6956e.jpg)
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 */publicstaticvoid 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 */publicstaticvoid 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 */publicstaticvoid 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.Double publicfinalclass java.lang.Double extends java.lang.Number { public java.lang.Double(double); public java.lang.Double(java.lang.String); ---------------------------------------- publicboolean equals(java.lang.Object ); publicstatic java.lang.String toString(double ); public java.lang.String toString(); publicint hashCode(); publicstaticnativelong doubleToRawLongBits(double ); publicstaticlong doubleToLongBits(double ); publicstaticnativedouble longBitsToDouble(long ); publicint compareTo(java.lang.Double ); publicvolatileint compareTo(java.lang.Object ); publicbyte byteValue(); publicshort shortValue(); publicint intValue(); publiclong longValue(); publicfloat floatValue(); publicdouble doubleValue(); publicstatic java.lang.Double valueOf(double ); publicstatic java.lang.Double valueOf(java.lang.String ); publicstatic java.lang.String toHexString(double ); publicstaticint compare(double , double ); publicstaticboolean isNaN(double ); publicboolean isNaN(); publicstaticboolean isInfinite(double ); publicboolean isInfinite(); publicstaticdouble parseDouble(java.lang.String ); ---------------------------------------- publicstaticfinaldouble POSITIVE_INFINITY; publicstaticfinaldouble NEGATIVE_INFINITY; publicstaticfinaldouble NaN; publicstaticfinaldouble MAX_VALUE; publicstaticfinaldouble MIN_NORMAL; publicstaticfinaldouble MIN_VALUE; publicstaticfinalint MAX_EXPONENT; publicstaticfinalint MIN_EXPONENT; publicstaticfinalint SIZE; publicstaticfinal java.lang.Class TYPE; privatefinaldouble value; privatestaticfinallong serialVersionUID; }
在java.lang.reflect包中有三个类Field、Method和Constructor分别是用于描述类的域、方法和构造器。
这三个类都有一个叫做getName的方法——用来返回项目的名称;getModifiers的方法——返回一个整型数值,用不同的位开关描述public和static这样的修饰符使用情况。
Field类有一个getType方法——用来返回描述域所属类型的Class对象。
Class类中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造数组,其中包括超类的公有成员。
Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将返回类中声明的全部域、方法和构造器,其中包括私有和受保护成员,但不包括超类的成员。
原文:http://www.cnblogs.com/Andya/p/5647436.html
内容总结
以上是互联网集市为您收集整理的java.lang.reflection打印一个类的全部信息全部内容,希望文章能够帮你解决java.lang.reflection打印一个类的全部信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。