반사 이다 런타임에 클래스의 런타임 동작을 검사하거나 수정하는 프로세스 . 자바 리플렉션 API 런타임에 필드, 메서드, 생성자 등을 포함하는 클래스 및 해당 멤버를 조작하는 데 사용됩니다. 이 기사에서는 Java Reflection API를 자세히 이해합니다.
이 기사에서는 다음 사항에 초점을 맞출 것입니다.
- Java Reflection API는 어디에 사용됩니까?
- java.lang.reflect Package의 클래스
- java.lang.Class에서 사용되는 메소드
- Class 클래스의 객체를 얻는 방법은 무엇입니까?
- Java Reflection API 사용의 장점 및 단점
이제 Java Reflection API에 대한이 기사에서 이러한 포인터를 시작하겠습니다.
Java Reflection API는 어디에 사용됩니까?
Reflection API는 주로 다음에서 사용됩니다.
- IDE (통합 개발 환경) 예 : Eclipse, MyEclipse, NetBeans 등
- 디버거
- 테스트 도구 등
그렇다면 Java lang의 클래스는 패키지를 반영합니까?
java.lang.reflect의 클래스 Package?
다음은 리플렉션을 구현하기위한 java.lang.package의 다양한 Java 클래스 목록입니다.
- 들 :이 클래스는 데이터 유형, 액세스 수정 자, 변수 이름 및 값과 같은 선언적 정보를 수집하는 데 사용됩니다.
- 방법 :이 클래스는 메서드의 액세스 수정 자, 반환 유형, 이름, 매개 변수 유형 및 예외 유형과 같은 선언적 정보를 수집하는 데 사용됩니다.
- 빌더 :이 클래스는 생성자의 액세스 수정 자, 이름 및 매개 변수 유형과 같은 선언적 정보를 수집하는 데 사용됩니다.
- 편집하다 :이 클래스는 특정 액세스 수정 자에 대한 정보를 수집하는 데 사용됩니다.
Java Reflection API 메서드를 살펴 보겠습니다.
java.lang.Class에서 사용되는 메소드
방법 | 기술 |
공용 문자열 getName () | 클래스 이름을 반환합니다. |
public static Class forName (String className) throws ClassNotFoundException | 클래스를로드하고 클래스 클래스의 참조를 반환합니다. |
public Object newInstance ()는 InstantiationException, IllegalAccessException을 발생시킵니다. | 새 인스턴스를 만듭니다. |
공개 부울 isInterface () | 인터페이스인지 확인합니다. |
공개 부울 isArray () | 배열인지 확인합니다. 자바에서 xml 파일 구문 분석 |
공개 부울 isPrimitive () | 원시인지 확인합니다. |
public 클래스 getSuperclass () | 슈퍼 클래스 클래스 참조를 반환합니다. |
public Field [] getDeclaredFields ()가 SecurityException을 발생시킵니다. | 이 클래스의 총 필드 수를 반환합니다. |
public Method [] getDeclaredMethods ()가 SecurityException을 발생시킵니다. | 이 클래스의 총 메서드 수를 반환합니다. |
public Constructor [] getDeclaredConstructors ()가 SecurityException을 발생시킵니다. | 이 클래스의 총 생성자 수를 반환합니다. |
public Method getDeclaredMethod (String name, Class [] parameterTypes) throws NoSuchMethodException, SecurityException | 메서드 클래스 인스턴스를 반환합니다. |
Class 클래스의 객체를 얻는 방법은 무엇입니까?
Class 클래스의 인스턴스를 얻는 방법은 3 가지가 있습니다. 다음과 같습니다.
- Class 클래스의 forName () 메서드
- Object 클래스의 getClass () 메서드
- .class 구문
Class 클래스의 forName () 메서드
- 클래스를 동적으로로드하는 데 사용됩니다.
- Class 클래스의 인스턴스를 반환합니다.
- 클래스의 정규화 된 이름을 알고있는 경우 사용해야하며 기본 형식에는 사용할 수 없습니다.
forName () 메서드의 간단한 예를 살펴 보겠습니다.
class Simple {} class Test {public static void main (String args []) {Class c = Class.forName ( 'Simple') System.out.println (c.getName ())}}
산출:
단순한
Java Reflection : Object 클래스의 API getClass () 메서드
Class 클래스의 인스턴스를 반환합니다. 유형을 아는 경우 사용해야합니다. 또한 프리미티브와 함께 사용할 수 있습니다.
class Simple {} class Test {void printName (Object obj) {Class c = obj.getClass () System.out.println (c.getName ())} public static void main (String args []) {Simple s = new Simple () 테스트 t = new Test () t.printName (s)}}
산출:
단순한
.class 구문
유형이 사용 가능하지만 인스턴스가없는 경우 유형 이름에 '.class'를 추가하여 클래스를 얻을 수 있으며, 원시 데이터 유형에도 사용할 수 있습니다.
class Test {public static void main (String args []) {Class c = boolean.class System.out.println (c.getName ()) Class c2 = Test.class System.out.println (c2.getName ()) }}
산출:
부울
테스트
이제이 Java Reflection API 기사를 계속 진행하겠습니다.
Java Reflection API 사용의 장점 및 단점
Java Reflection API 사용의 장점
- 확장 성 기능 : 응용 프로그램은 정규화 된 이름을 사용하여 확장 성 개체의 인스턴스를 만들어 외부 사용자 정의 클래스를 사용할 수 있습니다.
- 디버깅 및 테스트 도구 : 디버거는 리플렉션 속성을 사용하여 클래스의 전용 멤버를 검사합니다.
Java Reflection API 사용의 단점
- 성능 오버 헤드 : 반사 연산은 비 반사 연산보다 성능이 느리므로 성능에 민감한 응용 프로그램에서 자주 호출되는 코드 섹션에서는 피해야합니다.
- 내부 노출 : 반사 코드는 추상화를 깨뜨 리므로 플랫폼 업그레이드로 동작을 변경할 수 있습니다.
따라서 우리는 'Java Reflection API'에 대한이 기사의 끝까지 왔습니다. 더 자세히 알고 싶다면체크 아웃 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.
질문이 있으십니까? 이 기사의 댓글 섹션에 언급 해 주시면 최대한 빨리 답변 드리겠습니다.
파이썬에서 바이너리로 변환하는 방법