1. 개념
구체적인 클래스 타입을 알지 못할 때 해당 클래스의 메소드, 타입, 변수에 접근할 수 있게 해주는 자바 API
변수의 값을 조건에 따라 다르게 사용하거나 어플리케이션이 실행되고 나서 생성되어야 할 클래스가 있다면 사용할 수 있다.
2. 클래스 정보 가져오기
package com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 임의의 클래스 가져오기(클래스의 정보를 로드)
Class<? extends String> strCls = "Person".getClass();
System.out.println(strCls); // class java.lang.String
}
}
3. 이름으로 클래스 찾기
package com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 이름으로 클래스 찾기
try {
Class<?> cls = Class.forName("com.cls.Person");
System.out.println(cls); // class com.cls.Person
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. 클래스 내부 메소드
package com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 클래스 내부의 메소드
try {
Class<?> cls = Class.forName("com.cls.Person");
Method[] method = cls.getMethods();
for (Method mtd : method) {
System.out.println("name: " + mtd.getName());
System.out.println("declare: " + mtd.getDeclaringClass());
System.out.println("exceptions: " + Arrays.toString(mtd.getExceptionTypes()));
System.out.println("params-type:" + Arrays.toString(mtd.getParameterTypes()));
System.out.println("return-type: " + mtd.getReturnType());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. 클래스 내부의 필드
package com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 클래스 내부의 필드
try {
Class<?> cls = Class.forName("com.cls.Person");
Field[] field = cls.getFields();
System.out.println(Arrays.toString(field));
} catch (Exception e) {
e.printStackTrace();
}
}
}
6. 원시타입은 .class 사용
package com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 원시타입 : .class 문법을 사용
boolean bl;
// Class<?> blCls = bl.getClass(); // 컴파일 에러
Class<?> blCls = boolean.class;
System.out.println(blCls);
}
}
'Study > Java' 카테고리의 다른 글
[Java] HashMap은 값이 들어가는 순서를 보장하지 않는다 (0) | 2022.07.27 |
---|---|
[Java] 최대공약수와 최소공배수를 구하는 함수 (0) | 2022.04.25 |
Jsoup 사용하여 웹페이지 크롤링하기 (0) | 2022.03.03 |
Java : 디자인패턴, 싱글톤 (0) | 2022.02.16 |
Java : 제네릭, 컬렉션(ArrayList, LinkedList, HashMap, TreeMap) (0) | 2022.02.16 |