반사(2)Class 대상 이 얻 는 세 가지 방식 과 반사 실례 화 대상 을 통 해 얻 는 두 가지 방식

4222 단어 반사 와 대리
1.Class 대상 이 얻 는 세 가지 방식 은 지난 장 에서 말 했 듯 이 일반적인 상황 에서 자바 반사 작업 은 먼저 Class 대상 을 가 져 와 야 합 니 다.Class 대상 을 가 져 오 는 방법 은 세 가지 가 있 습 니 다.
공유 속성 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()를 통 해 대상 실례 화:어떤 구조 함 수 를 호출 하여 실례 화 할 지 선택 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기