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 |