ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210818_Exception
    JAVA 2021. 8. 18. 16:21

    Exception
    가벼운 예외이거나 예상하고 있던 예외인 경우에 사용

    예외처리를 해서 프로그램의 비정상적인 종료를 막자라는 취지이며 프로그램을 계속 진행할 수 있도록 함

     

    RuntimeException: 컴파일러가 체크하진 않지만 실행상의 에러에 대비

    Exception: 컴파일러가 체크해서 예외처리가 없으면 실행 안 됨. 반드시 작성해야만 컴파일

    NullPointException: 생성하지 않고 클래스 메서드를 호출

    NumberFormatException: 입력한 데이터의 형식 오류일 때

    ArrayIndexOutofBoundsException: 문자열의 인덱스값에 관한 오류

     

    ~~~~~~~~~~~~~~~~~~~~

     

    ArithmeticException

    (예제)

    System.out.println("프로그램 시작");

    //예외처리

    try {  //try영역 안에는 예외가 날 만한 코드

    int num=3/0;

    }catch (ArithmeticException e) {  //노말한건 Exception으로

    //예외를 처리하기 위한 코드

    //e.printStackTrace();  -자세한 예외정보 보기 위해

    System.out.println(e.getMessage());

    }

    System.out.println("프로그램 종료");

     

    //결과

    프로그램 시작

    / by zero

    프로그램 종료

     

     

    ~~~~~~~~~~~~~~~~~~~~

     

     

    NullPointerException

    (예제)

    public class ExceptionEx12 {

     

    Date date;

     

    public void writeDay() {

    int y,m,d;

     

    try {

    y=date.getYear()-1900;

    m=date.getMonth()+1;

    d=date.getDate();

    System.out.println(y+"년"+m+"월"+d+"일");

    }catch (NullPointerException e) {

    System.out.println("객체생성을 안했어요"+e.getMessage());

    }

    }

     

    public static void main(String[] args) {

     

    ExceptionEx12 ex12=new ExceptionEx12();

    ex12.writeDay();

     

    System.out.println("정상종료");

    }

    }

     

    //결과

    객체생성을 안했어요null

    정상종료

     

     

    ~~~~~~~~~~~~~~~~~~~~

     

     

    finally

    열려있는 file,db를 만약 열었다면 닫은 후 종료하라는 의미. 닫을 때는 열렸던 순서 반대

    /*

     * try{

     *    //예외가 발생가능한 문장

     *    }catch(예상되는 예외객체 변수명)

     *    {

     *    해당예외가 발생했을 시 수행할 문장들

     *    } finally

     *    예외발생여부와 상관없이 열었던 파일의 역순으로 close

     *    }

     */

     

    ClassNotFoundException

    (예제)

    try {

    Class cla=Class.forName("java.lang.string2");

    System.out.println("클래스를 찾았어요");

    } catch (ClassNotFoundException e) {

    System.out.println("클래스를 찾을 수 없습니다");

    }finally {

    System.out.println("프로그램 안전종료");

    }

     

    //결과

    클래스를 찾을 수 없습니다

    프로그램 안전종료

     

     

    ~~~~~~~~~~~~~~~~~~~~

     

     

    NumberFormatException

    (예제)

    Scanner sc=new Scanner(System.in);

    int num1,num2;

     

    while(true)

    {

    try {

    System.out.println("숫자1(종료:0)");

    num1=Integer.parseInt(sc.nextLine());

    if(num1==0)

    break;

    System.out.println("숫자2(종료:0)");

    num2=Integer.parseInt(sc.nextLine());

    }catch (NumberFormatException e) {

    System.out.println(e.getMessage());

     

    continue;

    }

     

    System.out.println("두 숫자의 합은 "+(num1+num2)+"입니다");

     

    }

    System.out.println("***정상종료***");

     

    //결과

    숫자1(종료:0)

    For input string: "ㄱ"

    숫자1(종료:0)

    5

    숫자2(종료:0)

    4

    두 숫자의 합은 9입니다

    숫자1(종료:0)

    0

    ***정상종료***

     

     

    ~~~~~~~~~~~~~~~~~~~~

     

     

    ArrayIndexOutOfBoundsException

    (예제)

    int[]arr= {4,6,10};

     

    for(int i=0;i<=arr.length;i++)

    {

    try {

    System.out.println(arr[i]);

    }catch (ArrayIndexOutOfBoundsException e) {

    System.out.println("오류메세지: "+e.getMessage());

    }

    }

    System.out.println("정상종료");

     

    //결과

    4

    6

    10

    오류메세지: Index 3 out of bounds for length 3

    정상종료

     

     

    ~~~~~~~~~~~~~~~~~~~~

     

     

    IOException,InterruptedException

    (예제)

    InputStream is=System.in;  //콘솔에서 입력받기 위한 노드스트림

     

    int a=0;

     

    System.out.print("한글자 입력:");

     

        try {

    a=is.read();

    } catch (IOException e) {

    System.out.println("오류: "+e.getMessage());

    e.printStackTrace();

    }  //바이트밖에 못 읽어서 2바이트 한글은 못 읽음..리턴값은 아스키코드

       

    System.out.println("**30초 뒤에 출력합니다**");

       

        try {

    Thread.sleep(3000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }  //Thread.sleep  3000은 3초뒤

       

       

    System.out.println("입력값: "+(char)a);  

    //형변환 안 하면 입력한 알파벳의 아스키코드 출력됨

     

    //결과

    한글자 입력:a

    **30초 뒤에 출력합니다**

    입력값: a

     

     

    'JAVA' 카테고리의 다른 글

    210819_split+tokenizer  (0) 2021.08.19
    210819_Exception(리뷰)  (0) 2021.08.19
    210818_익명내부클래스+상속  (0) 2021.08.18
    210818_익명내부클래스  (0) 2021.08.18
    210818_내부클래스  (0) 2021.08.18

    댓글

Designed by Tistory.