java反射 long_Java反射

importjava.io.File;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.lang.reflect.Modifier;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;public classMain {public static voidmain(String[] args) {

reflect("java.lang.Double");

}/** 反射*/

public static voidreflect(String className){try{//根据类的完整名称获取到类的实例

Class cl =Class.forName(className);

Class supercl= cl.getSuperclass(); //获取父类

String modifiers =Modifier.toString(cl.getModifiers());if(modifiers.length()>0){

System.out.print(modifiers+" ");

}

System.out.print("class " +className);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();

}

}/** 打印某个class的全部的构造函数*/

public static voidprintConstructors(Class cl){//获取当前class的全部构造方法

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){//打印修饰符 public

System.out.print(modifiers + " ");

}//打印构造方法名称

System.out.print(name + "(");//获取构造方法的参数类型

Class[] paramTypes =c.getParameterTypes();for(int j = 0;j0){

System.out.print(", ");

}//打印参数名称

System.out.print(paramTypes[j].getName());

}

System.out.println(");");

}

}/** 打印类的所有方法

* @param cl*/

public static voidprintMethods(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+" ");

}//打印返回类型和方法名称

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(");");

}

}/** 打印所有字段

* @param cl*/

public static voidprintFields(Class cl){//获取类的所有全局变量字段

Field[] fields =cl.getDeclaredFields();for(Field f : fields){//获取字段的类型 例如 :int ,String 等

Class type =f.getType();//获取字段名称

String name =f.getName();

System.out.print(" ");//获取字段的修饰符 例如:public 或者private或者public static final等

String modifiers =Modifier.toString(f.getModifiers());if(modifiers.length()>0){//打印字段的修饰符

System.out.print(modifiers +" ");

}//打印字段的数据类型和字段名称

System.out.println(type.getName() + " " + name + ";");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值