>  기사  >  Java  >  Java 반사 메커니즘의 기능은 무엇입니까?

Java 반사 메커니즘의 기능은 무엇입니까?

PHPz
PHPz앞으로
2023-04-25 17:19:071652검색

기능 설명

1. 동작 중에 어떤 객체가 속하는 클래스를 결정합니다.

2. 런타임에 모든 클래스의 객체를 생성합니다.

3. 작업 중에 모든 클래스의 멤버 변수와 메서드를 결정합니다.

4. 작동 중에 정보를 받습니다.

런타임에 모든 개체의 멤버 변수와 메서드를 호출합니다.

주석은 런타임에 처리됩니다.

동적 프록시를 생성합니다.

인스턴스

@Test
public void test1() throws Exception {
    Class<Person> clazz = Person.class;
    //1.通过反射,创建Person类对象
    Constructor<Person> cons = clazz.getConstructor(String.class, int.class);
    Person person = cons.newInstance("Tom", 12);
    System.out.println(person);//Person{name='Tom', age=12}
 
    //2.通过反射,调用对象指定的属性、方法
    //调用属性
    Field age = clazz.getDeclaredField("age");
    age.setAccessible(true);
    age.set(person, 10);
    System.out.println(person.toString());//Person{name='Tom', age=10}
 
    //调用方法
    Method show = clazz.getDeclaredMethod("show");
    show.invoke(person);//my name is Tom and age is 10
 
    System.out.println("===================================");
    //通过反射,可以调用Person类的私有结构的。比如:私有的构造器、方法、属性
    //调用私有的构造器
    Constructor<Person> cons1 = clazz.getDeclaredConstructor(String.class);
    cons1.setAccessible(true);
    Person p1 = cons1.newInstance("Bruce");
    System.out.println(p1);//Person{name='Bruce', age=0}
 
    //调用私有的属性
    Field name = clazz.getDeclaredField("name");
    name.setAccessible(true);
    name.set(p1, "Jarry");
    System.out.println(p1);
 
    //调用私有的方法
    Method nation = clazz.getDeclaredMethod("nation", String.class);
    nation.setAccessible(true);
    Object nation1 = (String) nation.invoke(p1, "China");//相当于String nation = p1.showNation("China")
    System.out.println(nation1);//I come from China
}

위 내용은 Java 반사 메커니즘의 기능은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제