目录
三种获取类信息的方式:
一个输入类名字获取类信息的类:
一个测试类:
测试结果
三种获取类信息的方式:
- 对象.getClass()
- 类.class
- Class.forname("类的路径")
People p;
Class c1=p.getClass();//将对象(实例)p对应的类的信息统统存储在类c1中
//(类的信息包括且不限于方法、函数、变量等)
一个输入类名字获取类信息的类:
package Java;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;public class Test1 {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:");name=in.next();}try {Class cl=Class.forName("Java.Demo");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.println("expends"+supercl.getName());System.out.print("\n{\n");printConstructor(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 printConstructor(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.println(modifiers + " ");System.out.println(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.println(" ");// 打印修饰符、返回类型和方法名称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(")");}}public static void printFields(Class c1) {Field[] fields = c1.getDeclaredFields(); // 获取类c1的所有字段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 + ";"); // 打印字段类型和名称,并以分号结束}}
}
一个测试类:
package Java;public class Demo {public int age;private String name;public static int x1;public Demo(){//不传参构造函数}public Demo(int a,String b){//传参构造函数}public void m1(String xx,int yy){//普通方法}public static void m2(int qq,double kk){//静态方法}
}
运行后输入类名字"Java.Demo"
测试结果
得到: