⭐Java---反射--获取类信息⭐

目录

三种获取类信息的方式:

一个输入类名字获取类信息的类:

一个测试类:

测试结果


三种获取类信息的方式:

  1. 对象.getClass()
  2. 类.class
  3. 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"

测试结果

得到:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值