Java反射 获取类信息

在Java中,可以使用反射机制来获取一个类的信息,包括类的名字、属性、方法等。反射机制通过在运行时动态地获取类信息,可以使程序具有更大的灵活性和可扩展性。在Java中,获取类信息的主要接口是Class类,可以使用该类的一些方法获取指定类的信息。

下面是使用Java反射获取类信息的示例代码:

public class Person {
    private String name;
    private int age;
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void sayHello() {
        System.out.println("Hello, I'm " + name + ", " + age + " years old.");
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        // 获取Person类的Class对象
        Class<?> clazz = Person.class;

        // 获取类名
        String className = clazz.getName();
        System.out.println("类名:" + className);

        // 获取类的属性
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            String fieldName = field.getName();
            System.out.println("属性名:" + fieldName);
        }

        // 获取类的方法
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            String methodName = method.getName();
            System.out.println("方法名:" + methodName);
        }
    }
}

上面的代码定义了一个Person类,该类有两个私有属性name和age,以及三个公有方法setName、setAge和sayHello。在Main类的main方法中,通过调用Person.class获取到Person类的Class对象。然后使用该对象的一些方法,如getName、getDeclaredFields和getDeclaredMethods等,分别获取类的名称、属性和方法。

需要注意的是,getDeclaredFields和getDeclaredMethods方法分别返回类中定义的所有属性和方法,包括私有的和受保护的,但不包括从父类继承而来的属性和方法。如果需要获取从父类继承而来的属性和方法,则需要使用getFields和getMethods方法。

使用Class类可以获取一个类的信息,包括类名、包名、父类、接口、属性、方法、构造器等等。以下是一些常用的Class类方法:
getName():返回类的完全限定名。
getSimpleName():返回类的简单名称。
getPackage():返回类所在的包。
getSuperclass():返回类的父类。
getInterfaces():返回类实现的接口。
getFields():返回类及其父类中公有的属性。
getDeclaredFields():返回类中所有的属性,包括私有的。
getMethods():返回类及其父类中公有的方法。
getDeclaredMethods():返回类中所有的方法,包括私有的。
getConstructors():返回类中所有的构造器。
getDeclaredConstructors():返回类中所有的构造器,包括私有的。