Java 리플렉션 메커니즘을 통해 프로그램은 소스 코드를 수정하지 않고도 클래스의 동작을 동적으로 수정할 수 있습니다. Class 객체를 통해 클래스를 조작하면 newInstance()를 통해 인스턴스 생성, 프라이빗 필드 값 수정, 프라이빗 메서드 호출 등이 가능합니다. 그러나 리플렉션은 예상치 못한 동작 및 보안 문제를 일으킬 수 있고 성능 오버헤드가 있으므로 주의해서 사용해야 합니다.
Java 리플렉션 메커니즘: 클래스의 동작 수정
소개
Java 리플렉션 메커니즘을 사용하면 프로그램이 클래스의 구조와 동작에 액세스하고 조작할 수 있습니다. 이는 소스 코드를 수정하지 않고도 클래스의 동작을 동적으로 수정하는 데 사용할 수 있습니다.
Concept
반사 메커니즘은 Class
对象来操作类。Class
对象提供了对类的方法、字段和注释的访问权限。我们可以使用 newInstance()
메서드를 통해 클래스의 인스턴스를 생성합니다.
실용 사례: 필드 값을 동적으로 수정
다음은 리플렉션을 사용하여 필드 값을 수정하는 예입니다.
public class Person { private String name; private int age; } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 name 字段 Field nameField = personClass.getDeclaredField("name"); nameField.setAccessible(true); // 设置为可访问,因为该字段是私有的 // 设置 name 字段的值 nameField.set(person, "John Doe"); // 打印修改后的值 System.out.println(nameField.get(person)); // 输出:John Doe } }
실용 사례: 프라이빗 메서드 호출
리플렉션을 사용하여 프라이빗 메서드를 호출할 수도 있습니다.
public class Person { private void doSomething() { ... } } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 doSomething() 方法 Method doSomethingMethod = personClass.getDeclaredMethod("doSomething"); doSomethingMethod.setAccessible(true); // 设置为可访问,因为该方法是私有的 // 调用 doSomething() 方法 doSomethingMethod.invoke(person); } }
참고
위 내용은 Java 리플렉션 메커니즘은 클래스의 동작을 어떻게 수정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!