반사(2)Class 대상 이 얻 는 세 가지 방식 과 반사 실례 화 대상 을 통 해 얻 는 두 가지 방식
4222 단어 반사 와 대리
공유 속성 class 방법 getClass()Class.forName()다음은 예제 코드 입 니 다.
/**
* Title: Java Class
* @author 2018/2/24 13:56
*/
public class ReflectClassDemo {
/** log4j */
private static final Logger LOGGER = Logger.getLogger(ReflectClassDemo.class);
/**
* Class
* @author hanchao
*/
public static void main(String[] args) throws ClassNotFoundException {
LOGGER.info(" Class 01: public class");
Class clazz1 = User.class;
LOGGER.info(clazz1);
System.out.println();
LOGGER.info(" Class 02: public getClass()");
User user = new User();
Class clazz2 = user.getClass();
LOGGER.info(clazz2);
System.out.println();
LOGGER.info(" Class 03:Class.forName( )");
Class clazz3 = Class.forName("pers.hanchao.reflect.common.User");
LOGGER.info(clazz3);
}
}
실행 결과:
2018-02-24 13:59:06 INFO ReflectClassDemo:18 - Class 01: public class
2018-02-24 13:59:06 INFO ReflectClassDemo:20 - class pers.hanchao.reflect.common.User
2018-02-24 13:59:06 INFO ReflectClassDemo:23 - Class 02: public getClass()
2018-02-24 13:59:06 INFO ReflectClassDemo:26 - class pers.hanchao.reflect.common.User
2018-02-24 13:59:06 INFO ReflectClassDemo:29 - Class 03:Class.forName( )
2018-02-24 13:59:06 INFO ReflectClassDemo:31 - class pers.hanchao.reflect.common.User
요약:
공유 속성 클 라 스 를 통 해 클 라 스 대상 을 가 져 옵 니 다:클래스 를 통 해 가 져 옵 니 다.클래스 대상 을 만 들 필요 가 없습니다.방법 getClass()를 통 해 Class 대상 을 가 져 옵 니 다:클래스 가 필요 한 대상 입 니 다.클래스 이름 은 모 르 지만 대상 을 얻 을 수 있 는 경우 에 많이 쓰 인 다.방법 Class.forName()을 통 해 Class 대상 을 가 져 옵 니 다.클래스 의 전체 이름 이 필요 합 니 다.이상 을 던 져 야 합 니 다.로 딩 설정 에 자주 사 용 됩 니 다.2.실례 화 대상 을 반사 하 는 두 가지 방식 은 뉴 실례 화 대상 을 통과 하 는 것 을 제외 하고 우 리 는 실례 화 대상 을 반사 하 는 두 가지 방식 이 있다.
Class.newInstance()Constructor.newInstance()다음은 예제 코드 입 니 다.
/**
*
* Created by on 2018/2/24.
*/
public class CreateObjectDemo {
private final static Logger LOGGER = Logger.getLogger(CreateObjectDemo.class);
/**
* Title:
* @author 2018/2/24 14:11
*/
public static void main(String[] args) throws Exception {
// new
User user = new User();
LOGGER.info(" new :" + user.toString());
//
Class userClass = User.class;
// 01-Class.newInstance()( [ ])
User user1 = (User) userClass.newInstance();
LOGGER.info(" 01-Class.newInstance()( [ ]):" + user1.toString());
// 02-Constructor.newInstance()( [ ])
Constructor constructor = userClass.getDeclaredConstructor();
User user2 = (User) constructor.newInstance();
LOGGER.info(" 02-Constructor.newInstance()( [ ]):" + user2.toString());
Constructor constructor1 = userClass.getDeclaredConstructor(String.class,String.class);
User user3 = (User) constructor1.newInstance(" ","000000");
LOGGER.info(" 02-Constructor.newInstance()( [ ]):" + user3.toString());
}
}
실행 결과:
2018-02-24 14:23:29 INFO CreateObjectDemo:22 - new :User{username=' ', password='123456'}
2018-02-24 14:23:29 INFO CreateObjectDemo:27 - 01-Class.newInstance()( [ ]):User{username=' ', password='123456'}
2018-02-24 14:23:29 INFO CreateObjectDemo:31 - 02-Constructor.newInstance()( [ ]):User{username=' ', password='123456'}
2018-02-24 14:23:29 INFO CreateObjectDemo:34 - 02-Constructor.newInstance()( [ ]):User{username=' ', password='000000'}
요약:
Class.new Instance()를 통 해 대상 을 예화 합 니 다.실제 호출 된 것 은 매개 변수 가 없 는 구조 함수 입 니 다.Constructor.newInstance()를 통 해 대상 실례 화:어떤 구조 함 수 를 호출 하여 실례 화 할 지 선택 할 수 있 습 니 다.