일반 [reflection/리플렉션] Class.forName

황제낙엽 2009.05.27 17:43 조회 수 : 468 추천:195

sitelink1 http://blog.naver.com/camel0826?Redirect...0046968893 
sitelink2 http://media.techtarget.com/tss/static/a...ynLoad.pdf 
sitelink3  
sitelink4  
sitelink5  
sitelink6  

 

JAVA.LANG.CLASS클래스

 

클래스의 정보를 얻기위한 클래스!! 즉, 클래스의 정보를 얻어오는 클래스이다.

 

forName() :

물리적인 클래스 파일명을 인자로 넣어주면 이에 해당하는 클래스를 반환해줌

클래스를 조사하기 위한 클래스

변수로 클래스를 만들때 Class.forName 은 유용하게 쓰인다.

 

 예제소스 (물리적인 WhitePerson 클래스를 인스턴스한다.)

 

try{

  Class c=Class.forName("poly.WhitePerson"); // 로딩단계(클래스조사),메모리에 올라오지는 않음(newInstance()해줘야함)

  Person p=(WhitePerson)c.newInstance(); // newInstance() 반환형이 Object형이므로 다운캐스팅한다.

}catch(ClassNotFoundException e1){ //클래스를 찾지못했을 경우에 대한 예외사항

   System.out.println("클래스가 존재하지 않습니다.");

}catch(InstantiationException e2){ //인스턴스(new)실패시에 대한 예외사항   

   System.out.println("메모리에 올릴수 없습니다.");

}catch(IllegalAccessException e3){ //파일접근에 대한 예외사항

   System.out.println("클래스파일 접근 오류입니다.");

}  

 

 종합예제 소스 (전체화일 poly.zip)

물리적(폴더에)으로 있는 클래스(WhitePerson/BlackPerson/YellowPerson)를 입력받아 해당클래스를

로딩&생성하여 속성(color 변수)에 대한 값을 출력하자!!

[1] 사용자가 입력한 문자열에 해당하는 클래스를 얻어온다.
[2] 얻어온 클래스를 메모리에 올린후 
[3] 해당 메서드를 실행!!

 

  1. package classtest;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import poly.*;
    public class ClassApp extends JFrame implements ActionListener{
     private JPanel p;
     private JLabel la;
     private JTextField txt1,txt2;
     private JButton bt; 
     public ClassApp(){
      p=new JPanel();
      la=new JLabel("생성할 클래스 입력");
      txt1=new JTextField(15);
      txt2=new JTextField(15);
      bt=new JButton("생성");
      p.add(txt1);
      p.add(bt);
      p.add(txt2);
      add(p);
      bt.addActionListener(this);
      setSize(200,150);
      setVisible(true);
     } 
     public void actionPerformed(ActionEvent ae){
      String className=txt1.getText();
      try{
       Class c=Class.forName(className); // 로딩단계(클래스조사), 메모리에 올라오지는 않음
       Person p=(Person)c.newInstance();
       txt2.setText(p.getColor());
      }catch(ClassNotFoundException e1){ //클래스를 찾지못했을 경우에 대한 예외사항
       txt2.setText("클래스가 없습니다.");
      }catch(InstantiationException e2){ // 인스턴스(new)실패시에 대한 예외사항
       txt2.setText("인스턴스를 생성할수 없습니다.");
      }catch(IllegalAccessException e3){ //파일접근에 대한 예외사항
       txt2.setText("엑세스 할수 없습니다.");
      }
     }
     public static void main(String[] args) {
      new ClassApp();
     }
번호 제목 글쓴이 날짜 조회 수
163 서블릿 응답 헤더(Response Header) 황제낙엽 2009.09.17 461
162 같은 문자열인데도 정규식에서 해당 문자열을 파싱하지 못하는 경우 황제낙엽 2009.08.08 367
161 MultipartRequest (cos.jar)와 서블릿을 이용한 업로드 file 황제낙엽 2009.06.19 651
160 [대용량 파일 업로드] multipart form parser - http file upload, database 저장 java class 연재2 file 황제낙엽 2009.06.19 2231
159 [대용량 파일 업로드] multipart form parser - http file upload 기능 java class 연재1 file 황제낙엽 2009.06.19 1678
» [reflection/리플렉션] Class.forName 황제낙엽 2009.05.27 468
157 문자열 내의 공백을 제거하는 간단한 정규식 황제낙엽 2009.05.20 399
156 문자열에서 특수 문자 (Escape Sequence) 처리 file 황제낙엽 2009.02.20 1633
155 정규표현식을 사용하는 String클래스의 replaceAll() 함수 개량 황제낙엽 2009.02.09 508
154 File 복사 함수 황제낙엽 2009.02.08 412
153 JSP session 정보 얻기 황제낙엽 2009.01.21 437
152 서버상의 로컬경로 (실제경로) 관련 환경변수 황제낙엽 2009.01.21 634
151 java.net.URL 생성시 로컬 파일에 접근 황제낙엽 2009.01.20 371
150 자바로 구현하는 Web-to-web 프로그래밍 황제낙엽 2009.01.20 425
149 Using Java's Net::URL Class To Access URLs (java.net.URL) 황제낙엽 2009.01.20 581
148 입력받은 문자열의 의미가 숫자인지 단순 텍스트인지 판별해야 할 때 황제낙엽 2009.01.09 373
147 사용팁 황제낙엽 2008.07.24 296
146 문자열 처리 - StringTokenizer 와 String.split() 황제낙엽 2008.07.08 462
145 숫자의 형식화 #1(Part-1)-java.text.NumberFormat 황제낙엽 2008.07.08 296
144 숫자 에 대응 되는 문자의 형식화 #2 황제낙엽 2008.07.08 342