注解与反射--获取类的信息

前提:创建一个User类:

//实体类
class User{
    private String name;
    private int id;
    private int age;

    public User() {
    }

    public User(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}

获取类的信息:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

//获得类的信息
public class Test08 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        Class c1 = Class.forName("User");

        //通过创建的新对象获取
        User user = new User();
        Class c2 = user.getClass();
        System.out.println(c2);

        //获得类的名字
        System.out.println(c1.getName());//获得包名加类名
        System.out.println(c1.getSimpleName());//获得类名

        //获得类的属性
        System.out.println("*********************************************");
        Field[] fields = c1.getFields();//只能找到public属性
        fields = c1.getDeclaredFields();//能找到全部属性
        for(Field i:fields){
            System.out.println(i);
        }

        Field name = c1.getDeclaredField("name");
        System.out.println(name);

        //获得类的方法
        System.out.println("*********************************************");
        Method[] methods = c1.getMethods();//获得本类及其父类的全部public方法
        for(Method j : methods){
            System.out.println("正常的"+j);
        }
        methods = c1.getDeclaredMethods();//获得本类的所有方法
        for(Method j : methods){
            System.out.println("getDeclaredMethods"+j);
        }


        //获得指定的类方法
        System.out.println("*********************************************");
        Method getName = c1.getMethod("getName");

        //为什么需要参数:因为Java具有重载功能,传参是用来区别不同方法
        Method setName = c1.getMethod("setName", String.class);
        System.out.println(getName);
        System.out.println(setName);

        //获得指定的构造器
        System.out.println("*********************************************");
        Constructor[] constructors = c1.getConstructors();//获得public方法
        for(Constructor i : constructors){
            System.out.println("getConstructors  "+i);
        }
        constructors = c1.getDeclaredConstructors();//获得本类全部方法
        for(Constructor i : constructors){
            System.out.println("getDeclaredConstructors  "+i);
        }

        Constructor constructor = c1.getConstructor(String.class, int.class, int.class);
        System.out.println("指定构造器:"+constructor);
    }
}

结果:
class User
User
User


private java.lang.String User.name
private int User.id
private int User.age
private java.lang.String User.name


正常的public java.lang.String User.toString()
正常的public java.lang.String User.getName()
正常的public int User.getId()
正常的public void User.setName(java.lang.String)
正常的public int User.getAge()
正常的public void User.setAge(int)
正常的public void User.setId(int)
正常的public final void java.lang.Object.wait() throws java.lang.InterruptedException
正常的public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
正常的public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
正常的public boolean java.lang.Object.equals(java.lang.Object)
正常的public native int java.lang.Object.hashCode()
正常的public final native java.lang.Class java.lang.Object.getClass()
正常的public final native void java.lang.Object.notify()
正常的public final native void java.lang.Object.notifyAll()
getDeclaredMethodspublic java.lang.String User.toString()
getDeclaredMethodspublic java.lang.String User.getName()
getDeclaredMethodspublic int User.getId()
getDeclaredMethodspublic void User.setName(java.lang.String)
getDeclaredMethodspublic int User.getAge()
getDeclaredMethodspublic void User.setAge(int)
getDeclaredMethodspublic void User.setId(int)


public java.lang.String User.getName()
public void User.setName(java.lang.String)


getConstructors public User()
getConstructors public User(java.lang.String,int,int)
getDeclaredConstructors public User()
getDeclaredConstructors public User(java.lang.String,int,int)
指定构造器:public User(java.lang.String,int,int)

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值