클래스명이 클래스인 클래스라니 푸하하
이건 사람이름이 사람인거잖아? 😏
Class
클래스는 class파일의 클래스나, 인터페이스, 생성자정보를 가져오는 데 사용한다.
getClass()
메소드 사용하기forName()
메소드를 사용해 클래스명으로 가져오기throws ClassNotFoundException
👉동적로딩이 가능하다.
프로그램 실행 이후 클래스의 로딩이 필요한 경우, 문자열을 통해서 다른 클래스를 로딩할 수 있다.
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Student student = new Student("서현",2020,false);
Class studentClass_get = student.getClass();
Class studentClass_direct = Student.class;
Class studentClass_forname = Class.forName("Student");
}
}
Constructor클래스 배열을 사용해서 Class의 모든 생성자를 출력할 수 있다.
⚠️import
문 필수!
//클래스 import필수!!
import java.lang.reflect.Constructor;
//Constructor[] 배열명 = Class.getConstructors();
Constructor[] cons = studentClass_forname.getConstructors();
for (Constructor c : cons) {
System.out.println(c);
}
👉출력 화면
public StudentClass0807(java.lang.String,int,boolean)
Field 클래스 배열을 사용해서 Class의 모든 멤버변수를 출력할 수 있다.
⚠️ import
문 필수!
import java.lang.reflect.Field;
Field[] files = studentClass_forname.getFields();
for (Field f : files) {
System.out.println(f);
}
👉 실행화면
public java.lang.String StudentClass0807.studentName
public int StudentClass0807.studentID
public boolean StudentClass0807.scholarship
Method 클래스 배열을 사용해서 Class의 모든 메소드를 출력할 수 있다.
⚠️ import
문 필수!
import java.lang.reflect.Method;
Method[] methods = studentClass_forname.getMethods();
for (Method m : methods) {
System.out.println(m);
}
👉 실행화면
public boolean StudentClass0807.equals(java.lang.Object)
...
Class의 메소드인 newInstance()
메소드를 이용해 인스턴스를 생성할 수 있고, 반환형이 Object
이기 때문에 생성된 객체형으로 반환해야한다.
또한 InstantiationException, IllegalAccessException
예외처리를 해줘야한다.
이런 방법은 더 복잡하고 예외처리도 필요하기 때문에 직접알고 있는 클래스라면 해당 클래스로 생성하는 것이 좋다.
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class studentClass_forname = Class.forName("StudentClass0807");
StudentClass0807 studentClass = (StudentClass0807) studentClass_forname.newInstance();
}
}
동적로딩 방식에 오류가 나면 컴파일오류가 아닌 실행오류로 이어질 수 있다.
조심조심~