지혜 팟 캐 스 트 학습 의 자바 반사

2156 단어 반사자바
그 밖 에 필 선생님 께 서 우리 에 게 반사 체 제 를 설명해 주 셨 다.비록 앞으로 우리 가 개발 하 는 과정 에서 반드시 반사 와 관련 되 는 것 은 아니 지만 반 사 는 확실히 자바 의 강력 한 도구 이다.이것 은 우리 로 하여 금 유연 한 코드 를 만 들 수 있 게 한다.이런 코드 들 은 실행 할 때 조립 할 수 있 고 구성 요소 간 에 소스 대표 링크 를 할 필요 가 없다.예 를 들 어 Tomcat 류 캐리어 라 는 메커니즘 은 많은 프레임 워 크 에서 사용 된다.1.반사 반사 라 는 개념 은 Smith 가 1982 년 에 처음으로 제기 한 것 으로 주로 프로그램 이 자신의 상태 행 위 를 방문 하고 검 측 하 며 수정 할 수 있 는 능력 을 말한다.반 사 는 자바 프로그램 개발 언어의 특징 중 하나 로 실행 중인 자바 프로그램 이 자신 을 검사 하거나'자체 심사'를 할 수 있 으 며 프로그램의 내부 속성 을 직접 조작 할 수 있 습 니 다.2.자바 반사 에 필요 한 클래스 1.Class 클래스:실행 중인 자바 응용 프로그램의 클래스 와 인터페이스 2.Constructor 클래스:클래스 의 단일 구조 방법 에 대한 정보 와 그 에 대한 접근 권한 을 제공 합 니 다.3.Method 클래스:클래스 나 인터페이스 에 대한 별도의 방법 을 제공 하 는 정보 4.Array 클래스:동적 으로 배열 을 만 들 거나 배열 에 접근 하 는 정적 방법 을 제공 합 니 다.5.Field 클래스:클래스 나 인터페이스의 속성 에 대한 정보 와 그의 동적 접근 권한 을 제공 합 니 다.3.반사 적 인 기능 위 에 우 리 는 관련 된 유형 을 열거 했다.그러면 이런 유형 을 구체 적 으로 이용 하면 우 리 는 어떤 일 을 할 수 있 습 니까?1)지정 한 클래스 의 Class 대상 을 가 져 오 는 방법 1.대상 을 통 해.getClass.(예:Person p;Class c=p.getClass();) 방법 2.Class 류 를 통 해 forName 방법(예:Class c=Class.forName(클래스 이름);)방법 3.유형 명.class 를 통 해 가 져 오기(Class c=int.class)2)를 실행 할 때 임의의 대상 을 구성 합 니 다.절 차 는 다음 과 같 습 니 다.① 유형 명 에 따라 대상 을 만 듭 니 다 ② 새로 만 든 대상 l 로 돌아 가 무 참 구조 방법 을 사용 하고 class 대상 의 new Instance 방법 만 사용 합 니 다.Class c=Class.forName(클래스 이름);Person p =(Person)c.newInstance; l 참조 가 있 는 구조 방법 을 사용 합 니 다.절 차 는 다음 과 같 습 니 다.① 지정 한 클래스 의 대상(동상)② Class 대상 을 통 해 지정 한 매개 변 수 를 만족 시 키 는 구조 방법 류 대상 Constructor cons=c.getConstructor(String.class)③ 지정 한 Constructor 대상 의 new Instance 방법 을 호출 하여 사용 하 는 매개 변수 값 을 입력 하여 대상 을 만 듭 니 다.Person p=(Person)cons.newInstance("장삼");3)실 행 될 때 임의의 대상 을 호출 하 는 방법 은 반 사 를 통 해 private 방법 ① 지정 한 클래스 의 대상(위)② 요구 에 따라 인 스 턴 스 ③ Class 대상 의 getDeclared Methods(필요 에 따라 다른 방법 을 선택 할 수 있 음)를 통 해 Method 의 인 스 턴 스 를 얻 을 수 있 습 니 다.invoke 방법 으로 호출 방법 Method m=c.getDeclared Methods("setName",String.class);returnvalue = m.invoke(p,"zhangsan"); 메모:private 방법 이 라면,이 방법 에 대응 하 는 Method 대상 의 setAccessible(true)을 먼저 호출 하여 이 방법 에 대한 안전 검 사 를 취소 할 수 있 습 니 다.Set 방법 을 통 해 대상 의 값 을 수정 하고 get 은 대상 의 값 을 얻 습 니 다.Field f =c.getDeclaredField("name"); f.set(p,"장삼");System.out.println(f.get(p));

좋은 웹페이지 즐겨찾기