Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react
- exiting abnormally
- 자바
- 리덕스 공식문서
- 리덕스
- ACCESS_REFUSED
- Express
- redux
- vue.js
- Java Reflextion API
- 자료구조
- 컴포넌트 주도
- REDIS
- rabbitmq 에러
- AWS
- 공식문서
- 커스텀 로그인
- 도커빌드
- EBS
- 오라클 병렬처리
- VUE
- $emit()
- forNmae()
- .getClass()
- 애그리거트
- quert
- 리액트
- 오라클
- 네임드 뷰
- paraller
Archives
- Today
- Total
개발정리
Java Reflection _ class 본문
클래스
- 모든 타입은 reference 나 primitive입니다.
- 클래스,enum 그리고 array 인터페이스 들은 모두 reference 타입들 입니다.
- 레퍼런스 타입의 예는 String, 래퍼클래스(Double,enum...)입니다.
- primitive타입의 예는 boolean,byte,short,int ... 이 있습니다.
- 오브젝트의 모든 타입에 대해 , JVM은 예를 들어 설명합니다. java.lang.Class의 불변의 인스턴스 메소드를 제공하는 런타임 프로퍼티를 조사하도록 객체의 멤버와 타입 정보를 포함한
- Class는 또한 제공합니다 능력을 새로운 클래스와 오브젝트를 만드는
- 가장 중요하게, 이것은 모든 리플렉션 API의 진입점 입니다.
- 이번 섹션은 대부분 클래스를 수반한 리플렉션 동작을 사용합니다.
Class 오브젝트 상기하기
- 모든 리플렉션 동작의 진입점은
java.lang.Class
입니다. java.lang.reflect.ReflectPermission
의 예외와 함께java.lang.reflect
는 public생성자가 없습니다.- 이러한 클래스들을 얻어오기 위해서, 클래스에 적절한 메소드를 호출하는것은 필수적입니다.
- 여기 몇가지 Class를 얻어오기 위한 방법이 있습니다.
Object.getClass()
- 만약 오브젝트의 인스턴스가 사용가능 하다면, 가장 손쉬운 방법으로 Class 의
Object.getClass()
를 호출하는 방법이 있습니다. 물론 이방법은 Object를 상속받은 레퍼런스 타입만 가능합니다.다음 예제를 보시죠
Class c = "foo".getClass();
- String 클래스를 리턴합니다.
Class c = System.console.().getClass();
- 여기 유일한 콘솔이 있습니다. 가상 머신과 관련된 이것은
System.console()
의 static 메소드에 의해 리턴됩니다.getClass()에 의한 리턴값은 java.io.Console에 상응하는 Class 입니다.enum E { A, B} Class c = A.getClass();
- A는 enum E의 인스턴스 입니다.
- 그러므로 getClass는 enum 타입 E에 상응하는 클래스를 리턴 합니다.
byte[] bytes = new byte[1024];
Class c = bytes.getClass();
- 배열들은 모두 Object이기 때문에 getClass를 호출하는 것이 가능합니다.
- byte타입의 배열이 반환됩니다.
import java.util.HashSet;
import java.util.Set;
Set<String> s = new HashSet<String>();
Class c = s.getClass();
- 이 상황에서는
java.util.Set
은java.util.HashSet
타입의 객체 의 인터페이스 입니다. - 리턴값은
java.util.HashSet
에 상응하는 클래스 입니다.
The .class Syntax
- 만약 타입이 사용가능하지만 인스턴스가 없다면 ".class"를 붙이는 것으로 클래스를 획득할 수 있습니다.
- 이것은 또한 가장 쉬운 방법입니다. primitive타입 의 클래스를 획득하는
boolean b;
Class c = b.getClass(); // 컴파일 시 에러
Class c = boolean.class; // correct
boolean.getClass()
문은 컴파일 타임에 에러가 발생할 수 있다는 것을 알아두세요 왜냐하면 boolean타입은 primitive타입 이며 역참조 될 수 없습니다.- .class 문법은 boolean에 상응하는 Class를 리턴합니다.
Class c = java.io.PrintStream.class;
- c의 값은
java.io.PrintStream
타입에 상응하는 클래스 일 것 입니다.class c = int[][][].class;
- .class 문법은 주어진 타입의 다차원 배열에 상응하는 클래스를 되찾아 올 것입니다.
Class.forName()
- 만약 클래스의 충분한 자격이 있는 이름이 가능하다면,
class.forName()
스태틱 메소드를 사용함 으로써 상응하는 class를 얻는 것이 가능합니다.(qualified name 이란 패키지명을 모두 포함한 클래스명) - 이것은 primitive타입에는 사용될 수 없습니다.
- 배열 클래스의 이름을 위한 문법은
class.getName()
으로 묘사됩니다. - 이 문법은 레퍼런스 타입과 primitive 타입에 적용됩니다.
Class c = Class.forName("com.duke.MyLocaleServiceProvider");
primitive 타입 wrapper 의 TYPE 필드
- .class 방식은 primitive타입 에서 클래스를 얻는 간편하고 선호되는 방식입니다.
- 하지만 클래스를 얻는 다른 방법이 있습니다.
- 각 primitive타입과 void는
java.lang
의 wrapper 클래스 가 있습니다. - 각 wrapper 클래스는 Class와 같은 TYPE 필드가 있습니다.
Class c = Double.TYPE;
Class c = Void.TYPE;
-----------------------------------------------------------------------------------------------------------------------
# 참조
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
'JAVA' 카테고리의 다른 글
Java Reflextion API 개요 (0) | 2024.04.15 |
---|---|
자바 컴파일 과정 (0) | 2024.03.17 |