>  기사  >  Java  >  Java 리플렉션에서 메서드를 얻는 방법

Java 리플렉션에서 메서드를 얻는 방법

anonymity
anonymity원래의
2019-05-08 15:02:064665검색

Java의 반사 메커니즘은 무엇인가요?

JAVA 리플렉션 메커니즘은 모든 클래스에 대해 이 클래스의 모든 속성과 메서드를 알 수 있습니다. 모든 개체에 대해 해당 메서드와 속성을 호출할 수 있습니다. 객체의 메소드를 동적으로 호출하는 정보와 기능을 Java 언어의 반사 메커니즘이라고 합니다.

클래스를 분석하려면 먼저 클래스의 바이트코드 파일 객체를 얻어야 합니다. 분석에서는 클래스 클래스의 메소드를 사용합니다. 따라서 먼저 각 바이트코드 파일에 해당하는 클래스 유형 객체를 얻어야 합니다.

Reflection은 Java 클래스의 다양한 구성 요소를 개별 Java 객체로 매핑하는 것입니다

예: 클래스에는 다음이 있습니다. 멤버 변수, 메서드, 생성자, 패키지 및 기타 정보를 사용하여 클래스를 분석하고 각 구성 요소를 개체에 매핑할 수 있습니다.

그림은 클래스의 일반적인 로딩 과정을 보여줍니다. 반사의 원리는 클래스 객체에 있습니다.

로딩 프로세스를 숙지하세요. Class 객체의 기원은 클래스 파일을 메모리로 읽어 들여 이에 대한 Class 객체를 생성하는 것입니다.

Java 리플렉션에서 메서드를 얻는 방법

클래스 객체를 얻는 세 가지 방법

1.1 객체 ——> getClass();

1.2 모든 데이터 유형(기본 데이터 유형 포함)에는 "정적" 클래스 속성이 있습니다

1.3 정적을 통해 Class 클래스의 메소드: forName(String className) (공통적으로 사용됨)

그 중 1.1은 Object 클래스의 getClass 메소드 때문인데, 모든 클래스가 Object 클래스를 상속받기 때문입니다. 따라서 Object 클래스를 호출하여

Example: Reflection

@Test
    // 通过反射调用类定义的方法
    public void testInvokeMethod() throws Exception {
        Class clazz = Class.forName("java.lang.String");
        // 定义参数类型
        Class[] params = new Class[1];
        params[0] = String.class;
        Method m = clazz.getDeclaredMethod("indexOf", params);
        // 设置参数
        Object[] p = new Object[1];
        p[0] = "e";
        Integer s = (Integer) m.invoke("helloworld!", p);
        System.out.println(s);
    }
을 통해 클래스에서 정의한 메서드 호출

위 내용은 Java 리플렉션에서 메서드를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.