자바(java) 기초 5편.

1. try~catch문 메커니즘

    try{
      1.
      2. (예외발생) int num = 3/0;
      3.
    }catch(Exception e){  //다형성
      4.
    }
      5.


 가. 2에서 예외발생됨
 나. 발생된 예외를 JVM 에게 알린다.
 다. JVM에서 발생된 예외를 처리 가능한 클래스를 찾는다.
     XXXException 을 찾았다.

 라. XXXException 클래스를 객체생성한다.
     
       XXXException x = new XXXException(발생된예외정보 ); / by zero

 마. 자바코드로 생성된 변수 x 를 던진다.

       throw  x;  //던진다.

 
 2. 다중 catch 문
  ==> 계층구조에서 하위클래스부터 catch 해야된다.
  ==> 세밀한 예외처리 와 가독 성 (권장)
  try{
 
     1. ( ArithmeticException
     2. ( NullPointException

    }catch(ArithmeticException    a){
       
  }catch(NullPointException  b){
      
  }catch(Exception    a){

  }

 3. finally 문
  ==> 반드시 수행되어야 하는 문장. (예외발생 유무와 상관없이)
  ==> 자원반납( 파일, 데이터베이스 ) : close 작업을 의미
   try{

   }catch(){

   }finally{

   }

 4. throws 예외처리
  : throw 와 별개이다.
  : 실행되는 단위가 메소드이다.
  : 예외가 발생된 곳에서 예외처리하지 않고
  호출한 메소드로 떠넘기는 방식이다.

  예>

  main(){        a() throws XXXException, yyy{   b() throws XXXException,yyy
 
 try{
    a();              b();                       //예외발생
 }catcg(XXXEx e){

 }catch(yyy  e){

 }
  }                   }                           }

   : 용도
   ==> 2가지

    가.  원격 작업 ( 네트워크 통신 )

    main():로컬  <————————-> a(): 서버

    나. 사용자 정의 예외클래스 사용하는 경우
    ==> API 예외클래스(시스템정의예외클래스)로 예외처리가 불가능한 경우에
    사용자가 만든 예외클래스로 처리할 수 있다. ( 일반적 )
    ==> 일반 애플리케이션을 만들면 개발자가 예외라고 가정하는 경우에
    담당하는 예외클래스이다.

     예>
          int num = 10;
   if( num == 10 ) ==> 예외라고 가정할 수 있다.

    ==> 발생된 시스템정의예외클래스를 사용자 정의예외클래스로
    변경해서 재발생시키는 경우:  한글로 예외처리하기 위한 방법.


6. 사용자 정의 예외클래스
 
  가. 클래스 정의
  : extends Exception

   public class MyException extends Excepiton{ }

   
  나. 구현
   : 문자열 하나있는 생성자 작성

public class MyException extends Excepiton{

    public MyException(String mesg){
         super(mesg);       // e.getMessage() , e.printStackTrace() 확인
    }
}

7. 예외클래스 종류
 
   – 종류1
     : 시스템정의 예외클래스
      ==> JVM 이 발생시킨다.

     : 사용자정의 예외클래스
       ==> 사용자가 발생시킨다.
          throw  new MyException(“에러”);

       ==> 용도
          : 특정조건에 위배될때
   : 시스템예외를 사용자예외로 변경해서 발생시킬때 ( end user 편의)

    – 종류2

      : compile checked 예외클래스 (*)
         ==> 컴파일시점에 예외처리 유무를 검사한다.
    반드시 예외처리를 해야 된 다.
         ==> IOException , SQLException 계열
         ==> 개발자가 신경써야 된다. 예외처리를 안하면 컴파일 에러가 발생되기 때문이다.
 
         예>
      BufferedWtier b = new BufferedWtier();
            try{
      b.write();
             }catch(IOException e){}

      : compile unchecked  예외클래스
         ==> 컴파일 시점에 예외처리 검사를 안한다.
     예외처리를 할 필요가 없다.

         ==> RuntimeException 계열
  ==> 개발자가 잘못이기 때문에 시스템이 검사안한다.
  ==> 예외처리를 안한다.
  ==>  개발자가 신경쓸 필요가 없다. ( 자동, 코드주의하자)

8. 상속관련 예외처리

 :  오버라이딩 메소드 관련
    – 리턴타입 동일
    – 메소드명 동일
    – 인자 리스트 동일
    – 접근 지정자는 확대만 가능
    – 예외는 축소만 가능

    Super  (   public void a() {} throws IOException )


    Sub        public void a() throws SQLException{}

9. 대량 데이터 저장 ( ==> 데이터를저장하는 방법)
 
  -변수
   :  10 , 20 , 30 ~ 100
     int n= 10;
     int n1= 20;
     int n2 = 30;
     ..
     int n99 = 100;

     “홍기동” , “이순신”, “유관순”;
     String name = “홍기동”;
     String name2 = “이순신”;
     String name3 = “유관순”;
     ..
   =====> 변수가 많아지면 관리가 어렵다.

  가. 배열
   : 하나의 변수이름(배열명)으로 대량의 데이터를 관리할 수 있다.
   :  PDT , RDT 배열로 구현 가능.
   : 같은 데이터형 만 저장 가능하다.
   : 배열명은 변수이고 참조형 변수이다. ( 위치값을 가진다.)


  : 배열생성방법
   =>문법 1  ( new 이용 )

    1) 배열 선언
    
      :  데이터형 [] 배열명; (*)     ,  데이터형  배열명 [];

     PDT                    RDT
    int [] num;            String [] name;


   2)  배열생성

     : 배열명 = new 데이터형[방크기];
     : 각 방에는 데이터형의 기본값이 저장된다.


     num = new int[3];          name = new String[4];

  ==> 1),2)을 한꺼번에 가능핟.
     int [] num  = new int[3];
     String [] name = new String[4];

   3) 배열 초기화
     : 각 방에 데이터 저장
     : 배열명[인덱스값|첨자];
     => 인덱스값은 0 부터시작
     ==> 배열크기:    배열명.length
     num.length ==> 3         name.length ==> 4

     num[0] = 1;              name[0] = “홍길동”;
     num[1] = 2;              name[1] = “이순신”; 
     num[2] = 3;              name[2] = “유관순”;
                              name[3] = “강감찬”; 
    


    => 문법2  ( 리터럴 이용 )
      : 저장 데이터를 확실히 아는 경우.

    int [] num = { 1, 2 ,3   };

    String []name = {“홍길동” , “이순신” , “유관순” ,  “강감찬”};  
==========================> 일차원 배열 ( 행 )

    * 2 차원 배열
    : 행 ,열

    int [][] num;                         String[][]name;

    num = new int[2][2];        name = new String[행크기][열크기];
   ==> 정방형형태로 생성

    num[0][0] = 1;
    num[0][1] = 2;
    num[1][0] = 3;
    num[1][1] = 4;

    num = new int[3][];  //동적열 생성 가능

  나. 컬렉션 ( 그릇 )
   : RDT만 구현 가능.(클래스만 저장 가능 )
    ==> 기본데이터형은 Wrapper 클래스를 이용해서 저장한다.
    ====> 모든 데이터를 저장할 수 있다.

   : 서로다른 데이터형도 저장 가능하다.
   : 컬렉션의 계층구조 ( java.util 패키지 )

                Collection (interface) – add, clear , remove, size ,,..

      |
  Set(Interface )               List(Interface )
  : 데이터 중복안됨,               : 데이터 중복 ,  순서가 있다.
    순서 없다.
       |                             |

    HashSet                      ArrayList , Vector
    (Iterator)                  (Iterator)  ( Iterator,Enumeration)
       

  Map 계열
   : 이름/값 ( 키/값 ) 쌍으로 저장한다.
   : 이름을 주고 값을 얻는다.
   : 검색속도가 빠르다.
   : 안드로이드에서 주로 사용.
   : HashMap, Hashtable, Properties
  

  :  제네릭(generic)
 
  : Enumeration 와 Iterator
   ==> java.util.Enumeration (이유멀레이션)
      : hasMoreElements() =>boolean
      : nextElement() =>Object

   ==> java.util.Iterator    ( 이터레이터 )
      : hasNext()==> boolean
      : next() ==> Object
      : remove()

   ==> 컬렉션에 저장된 데이터를 얻어올때 사용한다.

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다