java反射机制

简介

Java反射机制是Java语言中非常重要的一个特性。

它可以让程序在运行时动态地获取类、对象和方法等信息,并且可以在运行时修改程序的行为。

通过反射机制,我们可以实现以下操作:

1、在运行时获取一个对象所属的类的信息
2、动态地创建对象实例
3、获取/设置对象的字段值
4、调用对象的方法
5、访问所有方法(包含私有方法)

Java 的反射API都在 java.lang.reflect 包下面。常见的类有:Class、Field、Method 和 Constructor等。都提供了一些有用的方法,比如:

Class 类提供了获取类名、构造器、属性和方法等信息的方法。
Field 类提供了获取和设置字段值的方法。
Method 类提供了调用方法的方法。
Constructor 类提供了创建新对象的方法。

案例一:获取类的基本信息

我们定义一个简单的类,包含一个私有的成员变量和一个公共的方法:

public class Person {
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

编写测试代码,使用Class类来获取Person类的相关信息:

public static void main(String[] args) throws Exception {
    Class<?> personClass = Person.class;
 
    System.out.println("类的名称:" + personClass.getName());
    System.out.println("类的修饰符:" + Modifier.toString(personClass.getModifiers()));
    System.out.println("父类的名称:" + personClass.getSuperclass().getName());
 
    Field[] fields = personClass.getDeclaredFields();
    for (Field field : fields) {
        System.out.println("成员变量名:" + field.getName());
        System.out.println("成员变量类型:" + field.getType().getName());
    }
 
    Method[] methods = personClass.getDeclaredMethods();
    for (Method method : methods) {
        System.out.println("方法名:" + method.getName());
        System.out.println("方法返回值类型:" + method.getReturnType().getName());
        Class<?>[] parameterTypes = method.getParameterTypes();
        for (Class<?> parameterType : parameterTypes) {
            System.out.println("方法参数类型:" + parameterType.getName());
        }
    }
}


/*
类的名称:Person
类的修饰符:public
父类的名称:java.lang.Object
成员变量名:name
成员变量类型:java.lang.String
方法名:getName
方法返回值类型:java.lang.String
方法名:setName
方法返回值类型:void
方法参数类型:java.lang.String
*/

案例二:使用反射机制创建对象

使用反射机制来创建一个Person对象,并设置值,打印

public static void main(String[] args) throws Exception {
    Class<?> personClass = Class.forName("com.example.Person");
 
    Constructor<?> constructor = personClass.getDeclaredConstructor();
    constructor.setAccessible(true);
 
    Person person = (Person) constructor.newInstance();
    person.setName("张三");
 
    System.out.println(person.getName());  //输出张三
}

案例三:使用反射机制调用方法

使用反射机制来调用Person类的setName方法:

public static void main(String[] args) throws Exception {
    Class<?> personClass = Person.class;
 
    Person person = (Person) personClass.newInstance();
 
    Method setNameMethod = personClass.getDeclaredMethod("setName", String.class);
 
    setNameMethod.invoke(person, "李四");
 
    System.out.println(person.getName());  //输出李四
}

区别于正常的封装之后通过创建对象调用,我们通过Java反射机制能够在程序运行时获取到类、对象和方法等信息,并且可以在运行时动态地创建对象和调用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值