package reflection;

 import java.lang.reflect.*;
import java.util.*; public class ReflectionTest {
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
{
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();
printMethods(cl);
System.out.println();
printFields(cl);
System.out.println("}"); }
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
System.exit(0);
}
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+"("); 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(");");
}
} 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(" ");
String modifiers = Modifier.toString(m.getModifiers());
if(modifiers.length()>0) System.out.print(modifiers+" ");//private static final都是修饰符
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 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 +";"); }
} }

最新文章

  1. 快速部署tomcat项目的Shell脚本
  2. How to use a 32bit Oracle11_g client in 64 win system and not conflict with sqldeveloper 64 bit tool
  3. (新手向)基于Bootstrap的简单轮播图的手机实现
  4. Sapi 添加语法的文章(转载)
  5. [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)
  6. linxu c语言 fcntl函数和flock函数区别 【转】
  7. runtime/KVO等面试题
  8. openssl 证书请求和自签名命令req详解
  9. 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)
  10. iOS8指纹识别TouchID
  11. PostgreSQL学习手册(常用数据类型)
  12. jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画
  13. bzoj:1692 [Usaco2007 Dec]队列变换&amp;&amp;1640 [Usaco2007 Nov]Best Cow Line 队列变换
  14. PE知识复习之PE的绑定导入表
  15. c语言之gdb调试。
  16. mysql安装(centos 7)
  17. [PA2014]Bazarek
  18. laravel dingo/api添加jwt-auth认证
  19. 对话框 AlterDialog
  20. mke2fs 制作ext2文件系统image

热门文章

  1. [转载]运行中的DLL自升级
  2. STM32F429的LTDC和DMA2D ***
  3. oracle取前10条记录
  4. [JDBC]查询结果集把字段名和字段值一起竖向输出
  5. 【django学习】request.POST与request.POST.get两者主要区别
  6. Linux openkvm disk expansion
  7. Flutter AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换
  8. 008-SpringBoot发布WAR启动报错:Error assembling WAR: webxml attribute is required
  9. Windows 下使用OpenSSL生成RSA公钥和私钥
  10. Java基础教程:多线程杂谈——双重检查锁与Volatile