Person 클래스 생성
package classex;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(String name , int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return name;
}
public static void main(String[] args) {
}
}
ClassTest 클래스
package classex;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Person person = new Person("James");
System.out.println(person);
Class c1 = Class.forName("classex.Person"); // Person클래스를 동적 로딩
// 객체를 생성해주는데 Person 의 생성자 호출 리턴타입이 Object이니까 다운캐스팅
Person person1 = (Person) c1.newInstance();
System.out.println(person1);
Class[] parameterTypes = {String.class}; //parameterTypes를 가져오는데 class의 여러개를 쓰라는데
//class의 array 의 String.class 를 가져온다.
Constructor cons = c1.getConstructor(parameterTypes);
Object[] initargs = {"김유신"};
Person personLee =(Person)cons.newInstance(initargs); // 오브젝트의 array 를 가져온다.
System.out.println(personLee);
}
}
데이터 타입이 모두 바인딩 되어 자료형이 로딩된다.
실행중에 데이터 타입을 알고 binding 되는 방식이다.
바인딩된 c1으로 객체를 생성할수있는데 Person의 생성자를 호출하여 Object 를 다운캐스팅하여 만든다.
c1으로 생성자들을 알아낼수있다. getConstructor 메소드를 사용하여 파라미터 타입은
class 의 여러개를 쓰라는데 class 의 array의 String.class 를 가져온다.
인스턴스도 만들수있다.
만든 생성자 cons 를 newInstance 를 통해 오브젝트의 array 를 값을 가져온다.
'JAVA Programming' 카테고리의 다른 글
[57] String 클래스 힙메모리 , 상수풀 (0) | 2020.07.20 |
---|---|
[56] 끄적이기 equals(Object obj) , 부모 instanceof 자식 타입속하나 (0) | 2020.07.20 |
[55] 자바 버전 확인하기 (0) | 2020.07.20 |
[54] 객체 복사와 toString 으로 반환값 (0) | 2020.07.17 |
[53] Object 클래스의 Clone() 메소드 , finalize() 메소드 (0) | 2020.07.17 |