Java Exeption(예외)

Java Exeption(예외)

예외처리 오류 종류

# Error(오류), Exception(예외)

Error = 하드웨어의 잘못된 동작, 고장으로 인한 오류 에러가 발생되면 프로그램 종료 정상 실행 상태로 사용불가

Exception = 사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인한 오류 예외가 발생되면 프로그램 종료되나 예외 처리를 추가하면 정상 실행할 수 있음.

Exception종류

#일반 예외, 실행 예외

일반 예외 = 예외 처리 코드가 없으면 컴파일 오류 발생

실행 예외 = 예외 처리 코드를 생략하더라도 컴파일이 되는 예외, 경험 따라 예외 처리 코드 작성 필요

#Throwable는 예외 처리할 수 있는 클래스중 최상위 클래스이다. 다음으론 Exception

# toString()은 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드

실행 예외

NullPointerException = 객체 참조가 없는 상태.

ArrayindexOutOfBoundsException = 배열이 인덱스 범위를 초과하여 사용할 경우 발생

ClassCastException 타입 변환이 되지 않을 경우 발생

NumberFormatException 숫자형 포맷 오류, 문자를 숫자로 변경하려다 발생하는 오류.

public class NullPointerExceptionExample {

public static void main(String[] args) {

String date = null; // String타입의 date의 값은 unll이다.

System.out.println(data.toString()); // Date의 값을 출력한다

// (NullPointerExceptionExample.java:6) 해당 오류가 표시된다.

}

} public class ArrayIndexOutOfBoundsExceptionExample {

public static void main(String[] args) {

if(args.length == 2) { // args의값이 2개일때.

String data1 = args[0]; // String타입의 data1과 2를 만들고

String data2 = args[1]; // 각각 args의 0번째와 1번째의 값을 각각 저장한다

System.out.println("args[0]" + data1);

System.out.println("args[0]" + data2); // 출력한다.

} else { // 그렇지 않으면 (위에가 다를경우)

System.out.println("실행 방법");

System.out.println("java ArrayIndexOutOfBoundsExceptionExample");

System.out.println("값1, 값2");

}

}

} public class ClassCastExceptionExample {

public static void main(String[] args) {

Dog dog = new Dog(); // Dog와 Cat 사용하기위해 선언한다.

changeDog(dog);

Cat cat = new Cat();

changeDog(cat);

}

public static void changeDog(Animal animal) {

Dog dog = (Dog) animal;

}

}

class Animal { // 사용할 클래스를 추가로 만들고

}

class Dog extends Animal{ // Animal의 클래스를 상속받을 Dog 와 Cat의 클래스를 만들어준다.

}

class Cat extends Animal{

} public static void main(String[] args) {

String data1 = "100"; // string 타입의 data1과 2의 값을 주고

String data2 = "a100";

int value1 = Integer.parseInt(data1);

// 숫자형의 문자열을 받아서 intger형으로 반환(변환)시키고.

int value2 = Integer.parseInt(data2);

int result = value1 + value2; // int타입의 result를 추가해 반환된 value1과 2의 값을 result에 저장한다

System.out.println(data1 + "+" + data2 + "=" + result); // 값을 출력한다.

// 실행시 (NumberFormatExceptionExample.java:11) 해당 오류가 뜬다.

}

}

nullpointer 오류는 객체 참조가 없어 오류가 발생한다.

array 오류는 받을 args의 값이 없기 때문에 발생한다.

classcast 오류는 Cat라는 타입이 변환되지 못하니 발생한다.

number 오류는 data2의 값이 a100이기에 문자열을 숫자로 사용할 수 없기에 발생한다.

예외처리 코드(try-catch-finally)

예외 발생 시 프로그램 종료를 막고, 정상 실행 유지할 수 있도록 처리한다.

일반 예외 : 반드시 작성해야 컴파일이 가능

실행 예외: 컴파일러가 체크해주지 않고, 개발자 경험에 의해 작성

try-catch-finally 블록을 이용해 예외처리 코드 작성

try {

// 예외 발생하는 코드

} catch(발생하는 예외 e) {

// 해당 예외가 발생하면 어떻게 처리할지

} finally {

// 예외 여부와 관계없이 실행시킬 코드

}

#Integer.parseInt() 주어진 문자열을 정수로 변환시킨다

#Double.parseDouble() 주어진 문자열을 실수로 변환시킨다

다중 catch

예외 별로 예외 처리 코드 다르게 구현한다.

try블록에서 다발적으로 예외가 발생하지는 않고, catch가 여러 개 있다 하더라도 하나의 예외가 발생하면 발생하는 catch 블록으로 이동한다. catch의 발생하는 예외는 하위 예외 클래스가 항상 상위 예외 클래스보다 위에 있어야 한다.

#예를 들어 NullPointerException 객체 참조가 없는 오류가 발생하고 , ClassCastException 타입으로 변환되지 않는 상태라 할 때 둘 중 하나의 오류는 Exception 오류처리 코드로 작성한다.

try {

// 예외 발생하는 코드

} catch(NullPointerException e) {

// 해당 예외가 발생하면 어떻게 처리할지

} catch(Exception e){

// 나오는 모든 예외가 발생하면 어떻게 처리할지

}finally {

// 예외 여부와 관계없이 실행시킬 코드

}

멀티(multi) catch는 catch 블록 하나로 여러 개의 예외처리도 가능하단 내용이다.

#예를 들어 NullPointerException 객체 참조가 없는 오류가 발생하고 , ClassCastException 타입으로 변환되지 않는 상태라면 shift + \ = | 로 연결시킨다.

try {

// 예외 발생하는 코드

} catch(NullPointerException | ClassCastException e) {

// 해당 예외가 발생하면 어떻게 처리할지

} finally {

// 예외 여부와 관계없이 실행시킬 코드

}

자동 리소스 닫기

try-with-resources

# 예외 발생 여부와 상관없고, 사용했던 리소드 객체의 close() 메소드를 호출해 리소스를 닫는다

리소스 객체는 각족 입출력 스트림(인풋, 아웃풋), 서버 소켓, 소켓, 각종 채널

Java.lang.AutoCloseable;인터페이스를 구현하고 있어야 함.

#예외를 발생시킬 때 throw라는 코드가 들어가고 예외를 떠넘길 때 throws라는 코드가 들어간다.

from http://workerst.tistory.com/35 by ccl(A) rewrite - 2021-10-19 15:01:33