반사-소기
1. 반사 메커니즘의 정의
실행할 때 불러오고, 탐지하고, 컴파일하는 동안 완전히 알 수 없는 클래스를 가리킨다.
1. 프로그램은 운행 상태에서 이름만 있는 클래스를 동적으로 불러올 수 있으며 이미 불러온 클래스에 대해 이 클래스의 모든 속성과 방법을 알 수 있다.임의의 대상에 대해 그의 임의의 방법과 속성을 호출할 수 있다.
2. 클래스를 불러온 후에 메모리에 하나의 클래스 유형의 대상(하나의 클래스는 하나의 클래스 대상)이 생성된다. 이 대상은 완전한 클래스의 구조 정보를 포함하고 이 클래스의 대상은 마치 거울과 같다. 이 거울을 통해 클래스의 구조를 보면 반사라고 부른다.
둘째, 반사에는 어떤 장점과 단점이 있는가
장점: 1, 클래스와 클래스 간의 관계를 낮출 수 있음 2, 컴파일할 때의 검사를 실행할 때로 늦출 수 있음
단점: 1, 성능 효율이 높지 않고 코드의 유지보수성이 떨어진다
셋째, 반사 사용 방법
1, 반사 입구 클래스를 획득하는 세 가지 방법
①, 대상의 getClass() 방법;
Class class1=Object.getClass();
②, 종류.class(가장 안전/성능이 좋은) 속성;
Object obj=new Object();
Class class2=obj.class;
③, Class를 활용한다.forName(String className) 동적 로드 클래스, className은 클래스의 전체 이름 지정이 필요합니다.
Class class3=Class.forname( );
2, 구성원 변수 획득 위에서 반사되는 세 번째 방식을 예로 들면 ①, 본 유형의 모든 구성원 변수 획득(임의의 제한)
1, , Field
Field[] fields=class3.getDeclaredFields();
2, , Field
Field field=class3.getDeclaredField( );
②, 이 클래스 및 부류의public 수식의 구성원 변수 가져오기
1, , Field
Field[] fields=class3.getFields();、
2, , Field
Field field=class3.getField( );
3, 구조 방법 획득
①, 본 유형의 모든 구조 방법을 획득(임의의 제한)
1, , Constructor
Constructor[] constructors=class3.getDeclaredConstructors();
2, , Constructor
Constructor constructor=class3.getDeclaredConstructor( .class);
②, 본 클래스 및 부류의public 수식 구조를 획득하는 방법
1, , Constructor
Constructor[] constructors=class3.getConstructors();
2, , Constructor
Constructor constructor=class3.getConstructor( .class);
4, 구성원 획득 방법 ①, 이 클래스의 모든 구성원 획득 방법(임의의 제한)
1, , Method
Method[] methods=class3.getDeclaredMethods();
2, , Method
Method method=class3.getDeclaredMethod( .class);
②, 본 클래스 및 부류의public 수식 멤버를 획득하는 방법
1, , Method
Method[] methods=class3.getMethods();
2, , Method
Method method=class3.getMethod( .class);
5, 반사된 형태로 객체 만들기
.newInstance( , )
1, 속성 값 수정
①, ,
②,
field.setAccessible(true);
③,
field.set(.newInstance," ")\
2, 방법의 호출
①, ,
②,
method.setAccessible(true);
③,
method.invoke(.newInstance);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.