使用java中的反射机制调用其他类中的方法,构造器,以及相关属性

首先我们需要明白java中提供的反射中的一些相关方法:

 在java.lang.reflect包中有三个类Field,Method,Constructor分别用来描述类的域,方法以及构造器。

接下来进入主题:

里是打印出你要查询的类的名字,使用限制,以及它的父类

String name;
Scanner s = new Scanner(System.in);
name = s.nextLine();
try {
Class c = Class.forName(name);
Class c1 = c.getSuperclass();
String str = c.getName();
String modify = Modifier.toString(c.getModifiers());
System.out.print(modify+" "+name);
if(c1 != null) {
System.out.print(" extends "+c1.getName());
}

接下来写三个方法分别获得Constructor,Method,Field

public static void printConstructors(Class c) 

public static void printMethods(Class c)

public static void printFields(Class c)

具体方法如下:

public static void printConstructors(Class c) {
Constructor []con = c.getDeclaredConstructors();
try {
for(Constructor temp : con) {
System.out.print("  ");
String m = Modifier.toString(temp.getModifiers());
String name = temp.getName();
System.out.print(m+" class "+name+" (");
Class []param = temp.getParameterTypes();
for(Class c1 : param) {
System.out.print(c1);
}
System.out.println(" )");
}
} catch (Exception e) {
e.printStackTrace();
}
}


public static void printMethods(Class c) {
Method[] m = c.getDeclaredMethods();
for(Method temp : m) {
System.out.print("  ");
String modifer = Modifier.toString(temp.getModifiers());
String name = temp.getName();
Class returnType = temp.getReturnType();
Class []paras = temp.getParameterTypes();

System.out.print(modifer+" "+returnType+" "+name+" (");
for(int j=0;j<paras.length;j++) {
if(j>0)
System.out.print(","+paras[j]);
else
System.out.print(paras[j]);
}
System.out.print(")");
System.out.println();
}
}



public static void printFields(Class c) {
Field []f = c.getDeclaredFields();
for(Field temp : f) {
System.out.print("  ");
String modifer = Modifier.toString(temp.getModifiers());
String name = temp.getName();
Class type = temp.getType();
System.out.print(modifer);
if(modifer.length()>0) 
System.out.print(modifer);
System.out.print(type+" "+name);
System.out.println();
}
System.out.print(")");
System.out.println("}");
}

结果:如图

使用java中的反射机制调用其他类中的方法,构造器,以及相关属性