> Java > java지도 시간 > 반사기술이란? Java에서 가장 일반적으로 사용되는 반사 기술 예제

반사기술이란? Java에서 가장 일반적으로 사용되는 반사 기술 예제

php是最好的语言
풀어 주다: 2018-08-04 13:58:39
원래의
1140명이 탐색했습니다.

반사기술이란?

지정된 클래스와 클래스에 포함된 콘텐츠(멤버)를 동적으로 획득하고 해당 콘텐츠를 실행합니다. 응용 프로그램이 이미 실행 중이므로 새 객체를 생성할 수 없으면 해당 객체를 사용할 수 없습니다. 이때 구성 파일의 전체 클래스 이름에 따라 해당 바이트코드 파일을 찾아 메모리에 로드하고 이 클래스의 객체 인스턴스를 생성할 수 있습니다. 이를 위해서는 리플렉션 기술을 사용해야 하며, 클래스에서는 외부 세계가 일부 속성과 메서드에 액세스하는 것을 방지하기 위해 일반적으로 비공개로 설정됩니다. 이때 Java 리플렉션이 제공하는 편리함을 이용하여 액세스할 수 있습니다. 클래스의 전용 속성:

가장 일반적으로 사용되는 반사 기술

/**Person类****/package com.qiu;public class Person {
    private String name;    private static Integer age;    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public Integer getAge() {        return age;
    }    public void setAge(Integer age) {        this.age = age;
    }    @Override
    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String toString1() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String demo(String de) {        return de;
    }
}
로그인 후 복사
package com.qiu;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/**
 * 测试类
 * @author qiu
 *
 */public class Test {

    public static void main(String[] args) throws Exception {        //加载Person.class文件进内存
        Class clazz = Class.forName("com.qiu.Person");        //获取该类指定的属性age  getDeclaredField----> 获取所有属性,包括私有
        Field field = clazz.getDeclaredField("age");        //获取该类指定的属性name
        Field field2 = clazz.getDeclaredField("name");        //通过clazz实列化对象
        Object obj = clazz.newInstance();        //暴力访问。如果不设置默认为false是访问不到私有属性的。
        field.setAccessible(true);        //暴力访问。
        field2.setAccessible(true);        //初始化属性值
        field.set(obj, 123);
        field2.set(obj, "李白");        //获取该字段的值。
        Object o = field.get(obj);
        Object o1 = field2.get(obj);
        System.out.println(o);
        System.out.println(o1);        /*** 通过更简洁的方法获取指定方法 **/
        Method method = clazz.getMethod("getAge", null);
        System.out.println(method.invoke(obj, null));    /******** 通过反射获取带参数的方法  ******************************/

        Class clazz2 = Class.forName("com.qiu.Person");
        Method method41 = clazz2.getMethod("demo",String.class);
        Object obj3 = clazz.newInstance();
        System.out.println(method41.invoke(obj3, "邱某"));

    }
}
로그인 후 복사

인쇄 결과는 다음과 같습니다.

123
리 바이
123
Qiu

관련 기사:

작업에서 일반적으로 사용되는 Java 반사

Java의 반사 메커니즘

위 내용은 반사기술이란? Java에서 가장 일반적으로 사용되는 반사 기술 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿