Java反射技术二:利用反射打印一个类的构造函数、方法、域
2015-06-02 23:37
701 查看
转自:http://blog.chinaunix.net/uid-26434689-id-3338249.html
5.反射的例子:
利用反射打印一个类的构造函数、方法、域
5.反射的例子:
利用反射打印一个类的构造函数、方法、域
public class ReflectTest { public static void main(String[] args){ 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 c1 = Class.forName(name); Class superc1 = c1.getSuperclass(); String modifiers = Modifier.toString(c1.getModifiers()); if(modifiers.length() > 0) System.out.print(modifiers+" "); System.out.print("class "+name); if(superc1 != null && superc1 != Object.class) System.out.println( " extends"+superc1.getName()); System.out.print("\n{\n"); printConstructors(c1); printMethods(c1); printFields(c1); System.out.println("}"); }catch(ClassNotFoundException e){ e.printStackTrace(); } System.exit(0); } /* * prints all constructors of a class */ public static void printConstructors(Class c1){ Constructor[] constructors = c1.getConstructors(); for(Constructor c:constructors){ String name = c.getName(); System.out.print(" "); String modifiers = Modifier.toString(c1.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 */ public static void printMethods(Class c1){ Method[] methods = c1.getMethods(); for(Method m : methods){ Class retType = m.getReturnType(); String name = c1.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.print(paramTypes[j].getName()); } System.out.println(");"); } } /** * print all fields of a class */ public static void printFields(Class c1){ Field[] fields = c1.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+" "+name+";"); } } }
相关文章推荐
- 《Spring2之站立会议6》
- Java nio:浅析I/O模型
- Spring MVC 事务
- JAVA除法保留小数点后两位的两种方法
- 《Spring2之站立会议5》
- 《Spring2之站立会议4》
- Java构建工具Ant小记(一)
- Struts2 技术内幕 读书笔记(第二章)
- java基础基本数据类型对象包装
- Struts2原理图
- SpringMVC 控制器向视图传值的方式
- RandomAccessFile随机访问文件的读取和写入
- java基础(三)
- Java 反射技术三:调用其构造函数、方法、获取属性值
- Java-ThreadLocal的简单例子
- JAVA 数据库连接编码问题
- 再回首,Java温故知新(七):Java基础之运算符
- struts2配置文件—struts.xml
- javaSE原生数据类型(三)
- java base64编码和解码