ReflectionTest:由输入的类名得到类的信息
2024-09-26 14:32:16
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 +";"); }
} }
最新文章
- 快速部署tomcat项目的Shell脚本
- How to use a 32bit Oracle11_g client in 64 win system and not conflict with sqldeveloper 64 bit tool
- (新手向)基于Bootstrap的简单轮播图的手机实现
- Sapi 添加语法的文章(转载)
- [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)
- linxu c语言 fcntl函数和flock函数区别 【转】
- runtime/KVO等面试题
- openssl 证书请求和自签名命令req详解
- 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)
- iOS8指纹识别TouchID
- PostgreSQL学习手册(常用数据类型)
- jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画
- bzoj:1692 [Usaco2007 Dec]队列变换&;&;1640 [Usaco2007 Nov]Best Cow Line 队列变换
- PE知识复习之PE的绑定导入表
- c语言之gdb调试。
- mysql安装(centos 7)
- [PA2014]Bazarek
- laravel dingo/api添加jwt-auth认证
- 对话框 AlterDialog
- mke2fs 制作ext2文件系统image
热门文章
- [转载]运行中的DLL自升级
- STM32F429的LTDC和DMA2D ***
- oracle取前10条记录
- [JDBC]查询结果集把字段名和字段值一起竖向输出
- 【django学习】request.POST与request.POST.get两者主要区别
- Linux openkvm disk expansion
- Flutter AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换
- 008-SpringBoot发布WAR启动报错:Error assembling WAR: webxml attribute is required
- Windows 下使用OpenSSL生成RSA公钥和私钥
- Java基础教程:多线程杂谈——双重检查锁与Volatile