java 반사 메커니즘 문맹 퇴치

반사 메커니즘은 무엇입니까


반사 메커니즘은 운행 상태에서 임의의 클래스에 대해 이 클래스의 모든 속성과 방법을 알 수 있다.임의의 대상에 대해 임의의 방법과 속성을 호출할 수 있다.이런 동적으로 얻은 정보와 동적 호출 대상의 방법의 기능을 자바 언어의 반사 메커니즘이라고 한다.
**

반사 메커니즘은 무엇을 할 수 있습니까


**반사 메커니즘은 주로 다음과 같은 기능을 제공합니다.
  • 운행 시 임의의 대상이 속한 클래스를 판단한다.
  • 운행할 때 임의의 종류의 대상을 구성한다.
  • 운행할 때 임의의 종류가 가지고 있는 구성원 변수와 방법을 판단한다.
  • 실행할 때 임의의 대상을 호출하는 방법;
  • 동적 에이전트를 생성합니다.

  • 반사 메커니즘 획득 클래스에는 세 가지 방법이 있는데, 우리는 Employee 유형을 얻는다
    // :  
    Classc1 = Class.forName("Employee");  
    // :  
    //java class  .  
    Classc2 = Employee.class;  
    
    // :  
    //java java getClass    
    Employeee = new Employee();  
    Classc3 = e.getClass(); //c3  (e Employee)  

    획득 방법, 구조 방법, 더 이상 상세하게 설명하지 않고 키워드만 보십시오.
  • getDeclaredMethods () 모든 방법 가져오기
  • getReturnType() 획득 방법의 반송 유형
  • getParameterTypes()에서 얻은 방법의 전송 매개 변수 유형
  • getDeclaredMethod(방법명, 매개 변수 형식.class,...) 특정 방법 획득
  • getDeclaredConstructors () 모든 구조 방법 가져오기
  • getDeclaredConstructor(파라미터 유형.class,......) 특정한 구조 방법 가져오기
  • 또한 getDeclaredFields () 는 어떤 종류의 모든 설명 필드를 얻습니다. 즉,public,private,proteced를 포함하지만, 부류의 설명 필드는 포함되지 않습니다.getFields () 는 부모 클래스를 포함한 모든 공공 (public) 필드를 가져옵니다.
    다음은 예를 들면 다음과 같습니다.
    package com.app;
    
    
    public class T1 {
    
        public static void main(String[] args) {
    
            try {
                // 
                Class> class1 = Class.forName("com.app.Person");;
    
                // :  new  
                Object object = class1.newInstance() ;
    
                //               
                Person person = (Person) object ;
    
                person.setId( "100");
                person.setName( "jack") ; 
    
                System.out.println( "id: " + person.getId() + " name: " + person.getName()  );
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
    
        }
    }

    실행 결과:
    id: 100 name: jack

    인스턴스 2:
    package com.app;
    
    import java.lang.reflect.Field;
    
    public class T1 {
    
        public static void main(String[] args) {
    
            try {
                // 
                Class> class1 = Class.forName("com.app.Person");
    
                // 
                Object person = class1.newInstance();
    
                // id  
                Field idField = class1.getDeclaredField( "id" ) ;
    
                //    setAccessible , true false   
                // JDK . setAccessible(true)   
                idField.setAccessible( true );
    
                // id  
                idField.set(  person , "100") ;
    
                //  person  
                System.out.println( idField.get( person ));
    
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace() ;
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    }

    실행 결과
    100

    또한Class클래스는 어떤 클래스의 구조 방법을 얻기 위해 네 가지public 방법을 제공합니다.
    Constructor getConstructor(Class[] params)public 
    Constructor getConstructors()      public 
    Constructor getDeclaredConstructor(Class[] params)      , ( public publicConstructor getDeclaredConstructors()public public

    네 가지 구성원 획득 방법
    Method getMethod(String name, Class[] params)public 
    Method[] getMethods()     public 
    Method getDeclaredMethod(String name, Class[] params)     , ( public publicMethod[] getDeclaredMethods()public public

    네 가지 구성원 속성을 얻는 방법
    Field getField(String name)     , public 
    Field[] getFields()     public 
    Field getDeclaredField(String name)     , ( public public )
    Field[] getDelcaredField()     ( public public

    좋은 웹페이지 즐겨찾기