FIF's 코딩팩토리

자바 기초 NCS교육과정(39)-예외처리 본문

Back-End/국비 NCS교과과정

자바 기초 NCS교육과정(39)-예외처리

FIF 2019. 8. 1. 15:03
반응형
Exception

오류
 1 문법적 오류 : 오타, 자바문법에 맞지 않은 로직등을 구현할때 발생한다.
 2 실행오류 :  실행할때 발생되는 오류이다.
 
 실행오류(자바 런타임 에러)
 1 에러(error) : 프로그램 코드에 의해서 해결할 수 없는 심각한 오류
 2 예외(exception) : 프로그램 코드에 의해서 해결할 수 있는 오류

 int arr[]={10,20};
 arr[3];(쓰레기값)
 exception을 제공해준 목적 :
 기본 시스템은 정확하지 않는 값을 처리하는데 자바에서는  정확한 값만 처리할수
 있도록 exception을 제공해준다.
 exception이 발생이 되면 프로그램이 정상적인 종료가 안되므로 이를 해결하기
 위해서 예외처리를 제공해주고 있다. 

 예외가 발생되는 시점에 따라
 1 checked exception
 컴파일시점에 발생이 되므로 반드시 예외처리를 해야한다.
 RuntimeException외 클래스들이다.
 2 unchecked exception
 실행시점에 발생이되므로 예외처리를 선택이다.
 RuntimeException과 하위클래스들이다.

 예외처리
 1  try{
 //exception 발생 가능이 있는 구문
 }catch(//try영역에서 발생된 exception객체 선언){
 //try영역에서 exception이 발생되었을때 해결해주는 구문
 }finally{
 //무조건 실행되는 구문
 }

 2 exception이 발생되었을때 처리순서
 try영역-> catch영역-> finally영억
 exception이 발생되지 안았을때 처리순서
 try영역->finally영역


 3 try영역 또는 catch영역 에서 return을 만나고 finally영역을 수행을 한다.
 4 try~catch, try~finally만 작성해도 가능하다.
 단 catch~finally, try은 사용할 수 없다.

 5 예외의 메세지
 String getMessage() :메세지
 String toString() : 예외타입과 메세지
 void printStackTrace() : 예외가 발생된 경로 추적
 
다중catch
 1 is a(상속)관계에 있는 exception들을 나열할때는 제일위에 최하위 자손
   제일 아래에 최상의 조상을 입력한다.
 2 is a관계가 아닌  exception객체들은 순서에 상관없다.
 
 catch(ArrayIndexOutOfBoundException ex){}
 catch(RuntimeException ex){}
 catch(Exception ex){}(제일 상)
 
 throws
 예외처리를 현재 메소드를 호출하는 곳으로 떠 넘길때 사용한다.
 java.io, java.net
 
 throw
 강제적으로 exception을 발생시킬때 사용한다.

 

 

 

 

Java152_exception.java

public class Java152_exception {
public static void main(String[] args) {
int[] num = new int[] {10,20,30};
try {
//예외가 발생될 가능성이 있는 구문
System.out.println(num[5]);
}catch(ArrayIndexOutOfBoundsException ex){
//에외 발생 문제를 해결함
System.out.println(ex.toString());
}finally {
//무조건 실행
System.out.println("에외 처리 종료");
}
System.out.println("program end");
}
}

출력결과

 

Java153_exception.java

public class Java153_exception {
public static void main(String[] args) {
StringBuffer sb=null;
try {
sb.reverse();
}catch(NullPointerException ex){
System.out.println(ex.toString());
}
System.out.println("prgram end");
}
}

출력결과

 

Java154_exception.java

public class Java154_exception {
public static void main(String[] args) {
String data1 = "10";
String data2 = "0";
try {
int x = Integer.parseInt(data1);
int y = Integer.parseInt(data2);
int res = x / y;
System.out.println(res);
}catch(NumberFormatException ex){
System.out.println("숫자를 입력하세요.");
}catch(ArithmeticException ex) {
System.out.println("분모는 0을 사용할 수 없습니다.");
}catch(RuntimeException ex) {
System.out.println(ex.toString());
}catch(Exception ex) {
System.out.println(ex.toString());
}
System.out.println("program end");
}
}

출력결과

 

Java155_exception.java

public class Java155_exception {
public static void main(String[] args) {
File file=new File("samlple.txt");
FileReader fr=null;
try {
fr=new FileReader(file);
}catch(FileNotFoundException ex ) {
System.out.println(ex.toString());
}finally {
try {
fr.close();
}catch(IOException ex ) {
System.out.println(ex.toString());
}catch(NullPointerException ex) {
System.out.println(ex.toString());
}
}
}
}

출력결과

 

Java156_exception.java

public class Java156_exception {
public static void main(String[] args) {
String data1="9";
String data2="0";
try {
int x= Integer.parseInt(data1);
int y= Integer.parseInt(data2);
process(x,y);
}catch(NumberFormatException ex) {
System.out.println(ex.toString());
}catch(ArithmeticException ex) {
System.out.println(ex.toString());
}
System.out.println("program end");
}
public static void process(int x, int y) throws ArithmeticException{
int res=x/y;
System.out.println(res);
}
}

출력결과

 

Java157_exception.java

public class Java157_exception {
public static void main(String[] args) {
int num =5;
process(num);
System.out.println("korea");
}
public static void process(int data) {
try {
if(data<10) {
throw new ArithmeticException("10이상만 입력하세요");
}
}catch(ArithmeticException ex) {
System.out.println(ex.toString());
}
}
}

출력결과

 

Java158_exception.java

public class Java158_exception {
public static void main(String[] args) {
String data="9910as";
process(data);
}
public static void process(String data) {
char chk;
for(int i=0; i<data.length();i++) {
chk=data.charAt(i);
if(!Character.isDigit(chk))
try {
throw new UserException("숫자만 입력하세요");
} catch (UserException e) {
e.printStackTrace();
System.out.println(e.toString());
return;
}
}
System.out.println(data);
}
}

출력결과

반응형
Comments