Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java反射机制原理

作者:木齵乄语   发布日期:2025-09-06   浏览:54

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

public class ReflectionExample {

    // 定义一个简单的类用于反射操作
    public static class Person {
        private String name;

        public Person() {
            this.name = "Default Name";
        }

        public Person(String name) {
            this.name = name;
        }

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

        public String getName() {
            return name;
        }

        public void sayHello() {
            System.out.println("Hello, my name is " + name);
        }
    }

    public static void main(String[] args) {
        try {
            // 获取Class对象
            Class<?> personClass = Class.forName("ReflectionExample$Person");

            // 创建实例 (无参构造)
            Constructor<?> defaultConstructor = personClass.getConstructor();
            Object personInstance1 = defaultConstructor.newInstance();
            Method setNameMethod = personClass.getMethod("setName", String.class);
            setNameMethod.invoke(personInstance1, "Alice");
            Method sayHelloMethod = personClass.getMethod("sayHello");
            sayHelloMethod.invoke(personInstance1);

            // 创建实例 (带参构造)
            Constructor<?> paramConstructor = personClass.getConstructor(String.class);
            Object personInstance2 = paramConstructor.newInstance("Bob");
            sayHelloMethod.invoke(personInstance2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解释说明:

  1. 定义类:我们定义了一个简单的 Person 类,包含私有属性 name、两个构造函数(无参和带参)、以及一些公共方法。

  2. 获取Class对象:使用 Class.forName 方法获取 Person 类的 Class 对象。ReflectionExample$Person 是内部类的全限定名。

  3. 创建实例

    • 使用 getConstructor() 获取无参构造函数,并通过 newInstance() 创建实例。
    • 使用 getMethod() 获取 setName 方法,并调用该方法设置 name 属性。
    • 使用 getMethod() 获取 sayHello 方法,并调用该方法输出信息。
  4. 带参构造:使用 getConstructor(String.class) 获取带参构造函数,并通过 newInstance("Bob") 创建实例。

  5. 异常处理:反射操作可能会抛出多种异常(如 ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException),因此需要捕获并处理这些异常。

上一篇:java for

下一篇:java 获取当前时间戳

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站