초보 학 자바-자바 반사 메커니즘(1)
4512 단어 Java
반사
실행 상태 에서 임의의 클래스 에 대해 이 클래스 의 모든 속성 과 방법 을 알 수 있 습 니 다.임의의 대상 에 대해 서 는 임의의 방법 과 속성 을 호출 할 수 있 습 니 다.이러한 동적 으로 얻 은 정보 와 동적 호출 대상 의 방법 을 자바 언어의 반사 메커니즘 이 라 고 한다.
반사 하면 뭐 해?
1.실행 할 때 임의의 대상 이 속 한 종 류 를 판단 한다.
2.운행 할 때 임의의 유형의 대상 을 구성한다.
3.실행 할 때 임의의 클래스 가 가지 고 있 는 구성원 변수 와 방법 을 판단 합 니 다.
4.실행 할 때 임의의 대상 을 호출 하 는 방법;
5,동적 에이전트 생 성.
반사 API
하나의 언어 를 배 우 는 가장 좋 은 방법 은 API 문 서 를 보 는 것 이다.왜냐하면 API 는 가장 권위 적 이 고 정확 하기 때문이다.JDK 의 API 가 반사 에 대해 어떻게 설명 하 는 지 살 펴 보 겠 습 니 다!
반사 와 관련 된 모든 인터페이스 와 클래스 는 java.lang.reflect 패키지 에 있 습 니 다.
인터페이스
인터페이스 요약
AnnotatedElement
현재 이 VM 에서 실행 중인 프로그램의 주석 요 소 를 표시 합 니 다.
GenericArrayType
GenericArrayType 배열 형식 을 표시 합 니 다.구성 요소 형식 은 매개 변수 화 형식 이나 형식 변수 입 니 다.
GenericDeclaration
형식 변 수 를 설명 하 는 모든 실체의 공공 인터페이스 입 니 다.
InvocationHandler
InvocationHandler 프 록 시 인 스 턴 스 호출 처리 프로그램 입 니 다. 실현 의 인터페이스.
Member
구성원 은 하나의 인터페이스 로 하나의 구성원(필드 나 방법)이나 구조 방법 에 관 한 표지 정 보 를 나타 낸다.
ParameterizedType
Parameterized Type 은 Collection 과 같은 매개 변수 화 유형 을 표시 합 니 다.
Type
Type 은 자바 프로 그래 밍 언어 에서 모든 유형의 공공 고급 인터페이스 입 니 다.
TypeVariable
TypeVariable 은 각종 유형의 변수의 공공 고급 인터페이스 입 니 다.
WildcardType
Wildcard Type 은 마스크 형식 표현 식 을 표시 합 니 다.예 를 들 어 ?、? extends Number 혹시 ? super Integer。
종류
클래스 요약
AccessibleObject
AccessibleObject 류 는 Field,Method,Constructor 대상 의 기본 클래스 입 니 다.
Array
Array 클래스 는 자바 배열 을 동적 으로 만 들 고 접근 하 는 방법 을 제공 합 니 다.
Constructor
Constructor 클래스 의 단일 구조 방법 에 대한 정보 와 접근 권한 을 제공 합 니 다.
Field
Field 클래스 나 인터페이스의 단일 필드 에 대한 정보 와 동적 접근 권한 을 제공 합 니 다.
Method
Method 클래스 나 인터페이스 에 있 는 단독 방법(그리고 이 방법 에 어떻게 접근 하 는 지)에 대한 정 보 를 제공 합 니 다.
Modifier
Modifier 클래스 가 제공 합 니 다. static 방법 과 상수,클래스 와 구성원 방문 수정자 에 대해 디 코딩 합 니 다.
Proxy
Proxy 동적 프 록 시 클래스 와 인 스 턴 스 를 만 드 는 정적 방법 을 제공 합 니 다.이 방법 으로 만 든 모든 동적 프 록 시 클래스 의 초 클래스 입 니 다.
ReflectPermission
반사 조작의 Permission 클래스.
다음은 여러분 에 게 작은 실례 를 하나 쓰 겠 습 니 다.
package reflection;
public class UserInfo {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString(){
return this.getClass().getName();
}
}
package reflection;
public class GetClass {
public boolean ClassCheck(){
try {
System.out.println(" , ");
Class UserClass = this.getClass();
System.out.println(" ! :"+UserClass.toString()+"
");
System.out.println(" , ");
UserInfo ui = new UserInfo();
UserClass = ui.getClass();
Class SubUserClass = UserClass.getSuperclass();
System.out.println(" ! :"+SubUserClass.toString()+"
");
System.out.println(" , .class ");
Class ForClass = reflection.UserInfo.class;
System.out.println(" ! :"+ForClass.toString()+"
");
System.out.println(" , ");
Class ForName = Class.forName("reflection.UserInfo");
System.out.println(" ! :"+ForName.toString()+"
");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
public String toString(){
return this.getClass().getName();
}
public static void main(String[] args) {
GetClass gc = new GetClass();
gc.ClassCheck();
if (gc.ClassCheck()) {
System.out.println(" !");
}
else {
System.out.println(" , !");
}
}
}
위의 네 가지 방법 중에서 제 가 가장 많이 사용 하 는 것 은 네 번 째 입 니 다.이런 것 은 보통 설정 파일 과 함께 사용 합 니 다.반사 와 프로필 의 결합 은 우리 의 코드 를 매우 유연 하 게 만 들 고 확장 하기 쉬 우 며 유지 하기 쉽다.좋 은 점 이 많다 고 할 수 있 습 니 다.그래서'반사 반사,프로그래머 의 즐거움!'함께 마음껏 즐 기세 요!
PS:다음 편 은 실례 를 결합 하여 더욱 상세 한 설명 을 할 것 입 니 다!초보 학 프로 그래 밍(10)-자바 반사 메커니즘(2)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.