-
8일차 - 예외, 에러프로그래밍 언어/자바(JAVA) 2024. 2. 1. 09:08
에러(Error)
문법이나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류
: 나는 매개변수 값을 숫자로 설정했는데 문자를 넣은 경우예외(Exception)
사용자의 오 조작이나 외부 문제로 발생하는 오류
: 취미를 5개를 체크하세요 했는데 사용자가 8개를 넣은 경우- Exception
: 컴파일 중에 발생되는 예외, 이클립스에서 빨간줄로 표시해주기도 한다 - ★ Runtime Exception
: 실행 중에 발생되는 예외를 말한다- ★ NullPointException 객체가 없는 상태에서 객체에 접근할 경우
- 더보기
// NullpointException : 객체의 주소가 null 값인 상태에서 메소드를 호출하거나 변수에 접근할 경우 // - 가장 많이 실수하는 런타임 예외이다 String data = null; System.out.println(data.toString()); // 현재 문법상으로 잘못된거는 없음, 빨간줄이 없는데 실행은 되고 예외가 발생된다
- ★ ArrayIndexOutofBoundException 배열 인덱스 범위를 초과하여 사용 할 경우
-
더보기
// ArrayIndexOutofException : 선언된 배열의 크기보다 벗어난 인덱스에 접근하려할 경우 //- ★★★★★ 배열의 개념이 안잡혀있으면 반복문안에 배열이 있을때에 제일 많이 실수하는 부분이다 String[] arr = new String[2]; arr[0] = "data1"; arr[1] = "data2"; arr[2] = "data3"; // 없는 index 에 무언가를 하려고 했다
- NumberFormatException 숫자 변환 시 문자가 포함되어 있는 경우
-
더보기
// NumberFormatException : 숫자 형태가 아닌 문자열을 숫자로 변경하려고 할 경우 // - 회원가입 할때 숫자 적는 칸에 문자 적는 인간들 String pw = "1234"; int var; var = Integer.parseInt(pw); System.out.println(var); // "1234" -> 1234(정수형) 으로 바뀌게 된다 var = Integer.parseInt("1ab3"); System.out.println(var);
- ClassCastException 매개 값으로 받은 타입의 종류를 알 수 없을 경우
-
더보기
// ClassCastException : 부모형태로 들어간 객체가 다시 되돌아 올때 잘못 되돌아온 경우 Object val = 1234; // Object는 java의 모든 객체가 다 들어간다 int intVal = (int) val; // 본래의 형태로 되돌아 가는건 문제 없음 String stringVal = (String) val; // 문자열로 되돌아 가려고 한다면?
// NumberFormatException : 숫자 형태가 아닌 문자열을 숫자로 변경하려고 할 경우 // - 회원가입 할때 숫자 적는 칸에 문자 적는 인간들 String pw = "1234"; int var; var = Integer.parseInt(pw); System.out.println(var); // "1234" -> 1234(정수형) 으로 바뀌게 된다 var = Integer.parseInt("1ab3"); System.out.println(var);
Try-catch
try 영역 안에서 exception 발생시 catch 를 실행하는 구문이다 Finally 는 예외 발생시에도 실행할 코드를 작성한다
try{ 김 대리가 박 부장에게 보고서를 올린다; 보고서를 검토 한다; 문제 없으면 잘 했다고 한다; }catch(Exception e){ 오류 부분 e 를 지적하고 다시 하라고 한다; 호통 친다; }finally{ 자리로 들어 가라고 한다; }
Try-catch 활용한 예제
try 블록에서 예외가 발생하면 catch 로 넘어간다 마지막으로 실행해야하는 코드는 finally 에 작성한다
더보기public class Main { public static void main(String[] args) { String data1 = "12345"; String data2 = "1234z"; // 사용자에게 어떤 입력이 들어올지는 모르겠지만 try { // 문제 발생이 예상 되는 곳 int val1 = Integer.parseInt(data1); int val2 = Integer.parseInt(data2); } catch (NumberFormatException e) { // 예외 발생시 처리 내용 // 사용자에게 syso 으로 올바른 입력을 받도록 메시지 전달 System.out.println("숫자만 입력되어야 합니다"); } finally { // 무조건 실행되어야 하는 곳 System.out.println("data1 : " + data1); System.out.println("data2 : " + data2); } } }
예외는 공통적으로 Exception 을 상속 받는다
모든 예외를 받아 내고 싶을 경우는 Exception 하나로 처리가 가능하다
★다형성 : 부모 형태에 자식 객체가 들어갈 수 있는거
인터페이스 다형성 : 구현된 클래스가 인터페이스 안에 들어갈 수 있는거
Throws, 예외를 던진다
throws 는 호출한 객체에게 예외를 던진다
method2() -> method1() -> main() -> JVM 에게 전가
public class Main { // JVM 에게 전가 public static void main(String[] args) throws NumberFormatException{ // 또는 내가 처리 try { Sub sub = new Sub(); sub.method1(); } catch (Exception e) { // 예외에 대한 모든 정보가 e 객체에 다 들어가 있다 System.out.println("숫자만 입력 해야지"); System.out.println(e.toString()); } // sub 객체의 method1 메소드 호출 // 아무도 예외처리를 하지 않아서 JVM 에서 예외 발생 메시지가 떳다 } } public class Sub { // main 에게 전가 void method1() throws NumberFormatException { method2();// method1 에서 method2 메소드 호출 } // method1() 에게 예외처리를 전가 void method2() throws NumberFormatException { Integer.parseInt("a1234");// method2 에서 예외 발생 } }
'프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글
10일차 - Java I/O (0) 2024.02.05 9일차 - Iterator (0) 2024.02.02 8일차 - 컬렉션 프레임워크 (0) 2024.02.01 7일차 - String(스트링) (0) 2024.01.31 5일차 - 상속, 다형성 (0) 2024.01.29 - Exception