概述
package com.zhy.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;
/**
* 利用反射输出一个全部信息的方法
* 该程序提示输入类名,并依次打印出类名对应类的构造方法,其他方法,属性域等信息
* 2018/7/8
* @author zhy
*
*/
public class Reflection {
public static void main(String[] args) throws ClassNotFoundException {
Scanner scan = new Scanner(System.in);
String name;
//输入类名
System.out.println("enter class name like(eg
java.util.Date)");
name = scan.next();
//加载Class对象
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);
//若该类有父类且父类不是Object类那么打印出相关继承信息
if(superCl != null && superCl != Object.class){
System.out.print(" extends " + superCl.getName());
}
System.out.println("{");
//调用打印构造函数的方法
printConstructors(cl);
//调用打印其他方法的方法
printMethods(cl);
//调用打印属性信息的方法
printFields(cl);
System.out.println("}");
}
//输出构造方法的方法
public
static void
printConstructors(Class cl){
//获得包括该类所有构造方法的数组
Constructor[] constructors = cl.getDeclaredConstructors();
//遍历数组
for(Constructor consturcor : constructors){
System.out.print("
");
//获得方法的修饰符并打印
String modifiers
= Modifier.toString(consturcor.getModifiers());
if(modifiers.length() > 0){
System.out.print(modifiers + " ");
}
//打印类名即构造函数名字
System.out.print(cl.getName() + "(");
//获得包含该方法所有参数类型的Class对象数组
Class[] paramTypes = consturcor.getParameterTypes();
//遍历数组
for(int i = 0; i < paramTypes.length ; i++){
if(i > 0){
System.out.println(", ");
}
System.out.print(paramTypes[i].getName());
}
System.out.println(");");
}
}
//打印该类的所有方法
public static void printMethods(Class cl){
System.out.println();
//获得包含该类所有其他方法的数组
Method[] methods = cl.getDeclaredMethods();
//遍历数组
for(Method method : methods){
System.out.print("
");
//获得该方法的修饰符并打印
String modifiers = Modifier.toString(method.getModifiers());
if(modifiers.length() > 0){
System.out.print(modifiers + " ");
}
//打印方法名
System.out.print(method.getName() + "(");
//获得该方法包含所有参数类型的Class对象的数组
Class[] paramTypes = method.getParameterTypes();
//遍历数组
for(int i=0; i<paramTypes.length; i++){
if(i > 0){
System.out.print(",");
}
System.out.print(paramTypes[i].getName());
}
System.out.println(");");
}
}
public static void printFields(Class cl){
System.out.println();
//获得包含该类所有属性的数组
Field[] fields = cl.getDeclaredFields();
//遍历数组
for(Field field : fields){
System.out.print("
");
//获得属性修饰符
String
modifiers = Modifier.toString(field.getModifiers());
//打印修饰符
System.out.print(modifiers + " ");
//获得属性类型的Class对象
Class type = field.getType();
//打印类型名字
System.out.print(type.getName() + "");
//打印属性名字
System.out.println(field.getName());
}
}
}
eg:
enter class name like(eg
java.util.Date)
java.lang.Double
public final class java.lang.Double extends java.lang.Number{
public java.lang.Double(double);
public java.lang.Double(java.lang.String);
public equals(java.lang.Object);
public static toString(double);
public toString();
public hashCode();
public static hashCode(double);
public static min(double,double);
public static max(double,double);
public static native doubleToRawLongBits(double);
public static doubleToLongBits(double);
public static native longBitsToDouble(long);
public volatile compareTo(java.lang.Object);
public compareTo(java.lang.Double);
public byteValue();
public shortValue();
public intValue();
public longValue();
public floatValue();
public doubleValue();
public static valueOf(java.lang.String);
public static valueOf(double);
public static toHexString(double);
public static compare(double,double);
public static isNaN(double);
public isNaN();
public static isFinite(double);
public static isInfinite(double);
public isInfinite();
public static sum(double,double);
public static parseDouble(java.lang.String);
public static final doublePOSITIVE_INFINITY
public static final doubleNEGATIVE_INFINITY
public static final doubleNaN
public static final doubleMAX_VALUE
public static final doubleMIN_NORMAL
public static final doubleMIN_VALUE
public static final intMAX_EXPONENT
public static final intMIN_EXPONENT
public static final intSIZE
public static final intBYTES
public static final java.lang.ClassTYPE
private final doublevalue
private static final longserialVersionUID
}
最后
以上就是单纯方盒为你收集整理的利用反射分析一个类的全部信息的方法的全部内容,希望文章能够帮你解决利用反射分析一个类的全部信息的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复