설 연수
하하호홓
설 연수
전체 방문자
오늘
어제
  • 분류 전체보기 (231)
    • Back-End (2)
      • Java (20)
      • JSP (13)
      • Spring (18)
      • Kotlin (0)
      • node.js (0)
    • Front-End (68)
      • JavaScript (19)
      • jQuery (39)
      • Angular (4)
      • HTML (5)
    • Dev-Ops (12)
      • Linux, Cloud (5)
      • docker, k8s (5)
      • ElasticSeach (2)
    • Other (33)
      • OOP (3)
      • 알고리즘 (2)
      • DB (12)
      • Git (1)
      • Swift (4)
    • Backup (65)

블로그 메뉴

    공지사항

    인기 글

    태그

    • mongodb
    • 404 error
    • flex
    • angular2
    • 패스트캠퍼스
    • jOOQ
    • CORS
    • Kafka
    • MYSQL
    • Angular
    • angular callback
    • docker
    • jquery invalid
    • page not found
    • angular4
    • angular 콜백
    • RESTful
    • INVALID
    • Redis
    • 크로스도메인

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    설 연수

    하하호홓

    Back-End/Java

    Class.forName - 변수로 클래스를 만들때

    2012. 3. 6. 09:55

    03. Class.forName

    JAVA.LANG.CLASS클래스

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

     

    forName() :

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

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

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

     

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

    1. try{
       Class c=Class.forName("poly.WhitePerson"); // 로딩단계(클래스조사),메모리에 올라오지는 않음(newInstance()해줘야함)
       Person p=(WhitePerson)c.newInstance(); // newInstance() 반환형이 Object형이므로 다운캐스팅한다.
      }catch(ClassNotFoundException e1){ //클래스를 찾지못했을 경우에 대한 예외사항
    2.   System.out.println("클래스가 존재하지 않습니다.");
      }catch(InstantiationException e2){ //인스턴스(new)실패시에 대한 예외사항   
    3.   System.out.println("메모리에 올릴수 없습니다.");
      }catch(IllegalAccessException e3){ //파일접근에 대한 예외사항
    4.   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();
       }
      } 

      [출처] Class.forName()|작성자 이준우

    'Back-End > Java' 카테고리의 다른 글

    Apache Common유틸로 숫자난수 생성  (0) 2012.07.18
    JSON.simple 라이브러리를 이용한 Java에서 JSON 포맷 문자열 파싱  (0) 2012.05.07
    JSON.simple  (0) 2012.05.07
    [Log4j] log4j.properties 설정  (0) 2012.02.28
    Checked & UnChecked Exception  (0) 2012.02.24
      'Back-End/Java' 카테고리의 다른 글
      • JSON.simple 라이브러리를 이용한 Java에서 JSON 포맷 문자열 파싱
      • JSON.simple
      • [Log4j] log4j.properties 설정
      • Checked & UnChecked Exception
      설 연수
      설 연수

      티스토리툴바