java注解和反射-- 利用反射获取类的运行时结构(属性,方法,对象,构造器)

本文详细介绍了如何使用Java反射API获取类的运行时信息,包括类名、属性、方法、构造器,并展示了如何根据参数类型定位特定的方法和构造器。通过实例展示了获取公共属性、方法和构造器的过程,以及访问私有方法的技巧。
摘要由CSDN通过智能技术生成

利用反射获取类的运行时结构(属性,方法,对象,构造器)

在这里插入图片描述

package cn.usts.edu.getClassMethod05;

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

/**
 * @author :fly
 * @description: 获取类的运行时结构(属性,方法,对象,构造器)
 *               方法和构造器都有重载的存在,所以要给定参数类型,来定位到指定的构造器和方法
 * @date :2021/10/28 14:26
 */
public class GetClassMethod {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        Class<?> c1 = Class.forName("cn.usts.edu.getClassMethod05.User");

        // 获取报名+类名
        System.out.println(c1.getName());
        // 获取类的名字
        System.out.println(c1.getSimpleName());

        // 获取类的属性:
        Field[] fields = c1.getFields();// 只能获取到public修饰的属性
        // 遍历
        for (Field field : fields) {
            System.out.println(field);
        }

        // 获取指定属性的值
        Field name = c1.getDeclaredField("name");
        System.out.println(name);

        // 获得类的方法
        System.out.println("=================");
        Method[] methods = c1.getMethods();// 获取包括父类的所有方法
        for (Method method : methods) {
            System.out.println("包括父类的"+method);
        }

        Method[] declaredMethods = c1.getDeclaredMethods();// 获取当前类的方法
        for (Method declaredMethod : declaredMethods) {
            System.out.println("当前类的"+declaredMethod);
        }

        // 获取指定方法
        System.out.println("============获取指定方法=========");
        Method method03 = c1.getDeclaredMethod("method03", String.class);
        System.out.println(method03);
        Method method01_int = c1.getDeclaredMethod("method01", int.class);
        System.out.println(method01_int);
        // Method method01 = c1.getDeclaredMethod("method01", null); ide 推荐null不写
        Method method01 = c1.getDeclaredMethod("method01");
        System.out.println(method01);

        // 获取构造器
        System.out.println("============获取构造器=========");
        Constructor<?>[] constructors = c1.getConstructors();
        System.out.println("所有构造器");
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }

        // 获取指定构造器,因为方法和构造器都有重载的存在,所以要给定参数类型,来定位到指定的构造器和方法
        Constructor<?> declaredConstructor = c1.getDeclaredConstructor(int.class, String.class);
        System.out.println("指定构造器");
        System.out.println(declaredConstructor);
    }
}


// pojo 实体类
class User {
    public int age;
    public String name;

    public User() {
    }

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

    public void method01(){
        System.out.println("method01");
    }

    public void method01(int age){
        System.out.println("method02"+this.age+age);
    }

    private void method03(String name){
        System.out.println(name+"method03"+this.name);
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值