JAVA

210818_Exception

요옫 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