TryCatchEx1~3
MultiCatchEx1
RuntimeEx
예외처리
예외에는 컴파일러 체크 예외와 실행 예외가 있다.
컴파일러 체크 예외는 빨간줄이 쳐지는 문법적 오류가 있는 에러;
실행예외는 문법적으로는 맞지만 실행했을때 발생하는 에러;
자바는 예외처리 메커니즘을 제공한다
프로그램에서 문제가 될만한 부분을 예상하여 사전에
"문제가 생기면 이렇게 처리하라" 라고 프로그래밍하는것을 예외처리라고 한다.
NullPointerException - NPE
값이 없는 상태, 즉 null값을 갖는 참조 변수로 객체 접근 연산자인 .을 사용했을 때 발생함
ArrayIndexOutOfBoundsException
배열에서 인덱스 범위를 초과하여 사용할 경우 발생
NumberFormatException
문자열로 되어 있는 데이터를 숫자로 변경하는 경우에 발생
ClassCastException
형변환은 부모클래스와 자식클래스간에 발생/구현클래스와 인터페이스간에 발생/
이러한 관계가 아니면 다른클래스로 타입변환이 불가능함
---------------------------------------
StackOverflow 사이트에 들어가면 모든 정보가 있다.
사이트를 적극활용하여 에러를 찾아보자
----------------------------------------
Try~catch~finally
try블록에는 예외가 발생 할 수도 있는 코드를 작성(뭐든지 가능)
catch블록은 에러가 발생하면 실행할 코드를 작성
finally블록은 예외유무에 관계없이 항상 실행할 내용
Try~Catch문은 elseIf문처럼 계속 이어서 작성가능
package day10.exception.trycatch;
public class MultiCatchEx01 {
public static void main(String[] args) {
//main에 args 사용방법
// run -> run configration -> arguments탭 -> ${string_prompt}
// System.out.println(args[0]);
try {
String data1 = args[0];
String data2 = args[1];
int n1 = Integer.parseInt(data1);
int n2 = Integer.parseInt(data2);
String s = null;
s.charAt(0);
// System.out.println("두 수의 합 : ", (n1+n2));
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("매개값은 2개 입력하세요");
}catch(NumberFormatException e ) {
System.out.println("매개값은 숫자로 입력하세요");
}catch(Exception e) { //Exception을 쓴다는건 어떤 실행 예외든 처리가 가능하다는뜻(예외의 부모)
//ctrl + t를 누르면 상하관계까 보임
System.out.println("기타 예외 입니다.");
}
}
}
package day10.exception.trycatch;
public class RunTimeEx {
public static void main(String[] args) {
//실행예외(runtime)
// String s = null;
// if(s!= null) {
// s.charAt(0);
// }
//ArrayIndexOutOfBoundsException
// int[] arr = {1,2,3};
// arr[5] = 10;
//Class Cast
// Object o = new Object();
// Person p = (Person)o;
//NumberFormat
// String s= "홍길동";
// Integer.parseInt(s);
}
}
package day10.exception.trycatch;
public class TryCatchEx01 {
public static void main(String[] args) {
int a= 10;
int b= 0;
System.out.println(a+b);
try {
System.out.println(a/b);
System.out.println("실행이 될까요?");
System.out.println(a%b);
//catch뒤에는 해당 예외를 처리할 수 있는 예외종류가 들어감
} catch (Exception e) {
System.out.println("0으로 나눌수 없습니다.");
}
}
}
package day10.exception.trycatch;
public class TryCatchEx02 {
public static void main(String[] args) {
String[] arr = {"홍길동", "이순신", "홍길자"};
int i = 0;
while(i<4) {
try {
System.out.println(arr[i]);
} catch (Exception e) {
System.out.println("범위를 벗어났습니다");
}finally {
System.out.println("이 문장은 예외 여부와 상관없이 항상 실행됨");
}
i++;
}
}
}
package day10.exception.trycatch;
import java.util.*;
public class TryCatchEx03 {
public static void main(String[] args) {
//입력과 예외처리
//0을 입력하기 전까지 숫자를 입력.
Scanner scan = new Scanner(System.in);
boolean flag = true;
int num = 0;
while(flag){
try {
System.out.print(">");
// int num = Integer.parseInt( scan.nextLine() );
num = scan.nextInt(); //nextInt는 정수만 받음
if(num==0) break; //0을 입력하면 탈출
} catch (Exception e) {
System.out.println("숫자를 입력하시오");
scan = new Scanner(System.in);
// scan.nextLine()
}
if(num==0) break; //0을 입력하면 탈출
}
}
}
'JAVA > 코드' 카테고리의 다른 글
2022_10_17 연습 04 day10.exception.throw_ (0) | 2022.10.17 |
---|---|
2022_10_17 연습 03 day10.exception.throws_ (0) | 2022.10.17 |
2022_10_17 연습 01 day09.inter.inherit (0) | 2022.10.17 |
2022_10_14 연습 06 quiz16 (0) | 2022.10.14 |
2022_10_14 연습 05 Default Interface (0) | 2022.10.14 |
댓글