首先自定义三个类

package reflection1;

public interface MtInterface {
    void info();
}
package reflection1;

import java.io.Serializable;

public class Creature<T> implements Serializable {
    private char gender;
    public double weight;
    
    private void breath() {
        System.out.println("呼吸");
    }
    public void eat() {
        System.out.println("吃饭");
    }
}
package reflection1;


public class Person extends Creature<String> implements Comparable<String>,MtInterface {
    
    private String name;
    int age;
    public int id;
    
    public Person() {
        super();
    }
    private Person(String name) {
        super();
        this.name = name;
    }
    Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Person(String name, int age, int id) {
        super();
        this.name = name;
        this.age = age;
        this.id = id;
    }
    
    private String show(String nation) {
        System.out.println("nation="+nation);
        return nation;
    }
    public String display(String interests) {
        return interests;
    }
    
    @Override
    public void info() {
        System.out.println("我是人");
    }

    @Override
    public int compareTo(String o) {
        return 0;
    }
    
    private static void showDesc() {
        System.out.println("i am zsben");
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", >;
    }
    
}

然后通过反射获取类属性结构

package reflection2;

import java.lang.module.ModuleDescriptor.Exports.Modifier;
import java.lang.reflect.Field;

import org.junit.jupiter.api.Test;

import reflection1.*;

/*
 * 获取当前运行时类的属性结构
 * */

public class FieldTest {
    @Test
    public void test1() {
        Class clazz = Person.class;
        
        //获取属性结构
        //getFields():获取当前运行时类及其父类中所有public的属性
        Field [] fields = clazz.getFields();
        for(Field f:fields)
            System.out.println(f);
        
        System.out.println("");
        
        //getDeclaredFields():获得当前运行时类的所有属性,不包含父类的属性,不考虑权限
        fields = clazz.getDeclaredFields();
        for(Field f:fields)
            System.out.println(f);
        
        System.out.println("");
    }
    
    //权限修饰符:数据类型 变量名
    @Test
    public void test2() {
        Class clazz = Person.class;
        Field [] fields = clazz.getDeclaredFields();
        for(Field f:fields) {
            System.out.println(f);
            //1.权限修饰符
            int modifiers = f.getModifiers();
            System.out.println(modifiers);
            
            //2.数据类型
            Class type = f.getType();
            System.out.println(type);
            
            //3.变量名
            String name = f.getName();
            System.out.println(name);
            
            System.out.println("");
        }
    }
}
View Code

相关文章: