[프로그램 오류]
오류의 종류
1. 컴파일 에러 : 프로그램의 실행을 막는 소스 상의 문법 에러, 소스 구문을 수정하여 해결
2. 런타임 에러 : 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등 주로 if문 사용으로 에러 처리
3. 시스템 에러 : 컴퓨터 오작동으로 인한 에러, 소스 구문으로 해결 불가
2번과 같은 소스 수정을 해결 가능한 에러를 예외(Exception) 라 하고
이는 예외처리를 통해 해결함
try ~ catch 문
try ~ catch ~ resource 문
자바7에서 추가된 기능으로 finally에서 작성했던 close 처리를
try문에서 자동 close 처리
최근 자바 17버전 패치 이후로 바깥 선언도 가능
사용자 정의 예외
짜잘한 예외들을 Exception으로 받아 처리
범용적으로 많은 예외를 처리해야 할때 사용하는게 리소스상 좋다.
[RuntimeException.java]
package com.multi.ex01.exception;
public class RuntimeException {
public static void main(String[] args) {
// ArithmeticException:
int a = 10 / 0;
System.out.println(a);
// ArrayIndexOutofBoundsException : Index 12 out of bounds
int[] array = new int[10];
array[12] = 10;
// NegativeArraySizeException
array = new int[-1];
// NullPointerException
array = null;
array[10] = 10;
// ClassCastException
Object obj = new Object();
String str = (String)obj;
// System Error / OutOfMemoryError : Required array length too large
//과도한 요구 or 지속적인 누수로 메모리가 부족할때 발생, 코드 문제(heap을 이용한 누수 해결 등)를 해결하거나 Xmx를 늘려 해결가능
String str1 = "11248901284092187409281490128490";
while(true) {
str1 += str1;
}
//java.lang.OutOfMemoryError: Java heap space
// String str3 = "11248901284092187409281490128490";
// StringBuffer sb = new StringBuffer();
// while(true) {
// sb.append(str3);
// }
// java.lang.StackOverflowError 임베디드 계열에서 자주보임..
// method(); //무한루프
}
public static void method() {
int temp =0;
method();
}
}
[Trycatch.java]
package com.multi.ex01.exception;
import java.io.IOException;
public class Trycatch {
// 방법0. 손으로 완성하기
// 방법1. 자동완성 안쪽으로 에외 들고오기
// 방법2. 마우스 우클릭 - 서라운드 위드 - try-catch 감싸기
public static void main(String[] args) {
//alt + shift + z
try {
System.out.println("파일 관련 에러가 발생할수 있는 구간 시작");
if(true) {
throw new IOException();
}
System.out.println("구간끝");
} catch (IOException e) {
System.out.println("IOException 발생"); //범위가 작은 에러가 위(앞)으로 와야함
e.printStackTrace(); //error를 추척하여 에러 구간과 코드라인을 알려주는 print문
} catch (Exception e) {
e.printStackTrace(); //error를 추척하여 에러 구간과 코드라인을 알려주는 print문
} finally {
System.out.println("finally 구간"); //예외가 발생 하든 안하든 작동한다
}
System.out.println("DeadLine");
}
}
[UseThrows.java]
package com.multi.ex01.exception;
import java.io.IOException;
public class UseThrows {
// throws : 예외가 발생하면 호출한 메소드에게 예외의 책임을 전가하는 키워드
// 단, main에서 발생시에는 프로그램 종료를 의미
// throw : 예외를 만들어서 던지는 문장
public static void main(String[] args) {
try {
method();
} catch (Exception e) {
e.printStackTrace(); }
}
public static void method() throws IOException { //여기서 throws로 main함수에게 예외책임을 전가
System.out.println("예외처리 이전"); // 나쁜문장인가? ->X 상위 함수에서 try catch문으로 처리하는 모양새가 깔끔
if(true) {
throw new IOException();
}
System.out.println("예외처리 이후");
}
}
'자바' 카테고리의 다른 글
[Java] .csv crawling (0) | 2023.12.19 |
---|---|
[Java] JSON Parsing (0) | 2023.12.19 |
제네릭 (0) | 2023.12.19 |
[Java] JDBC MVC (0) | 2023.11.30 |
[Java] JDBC (Java DataBase Connectivity) (0) | 2023.11.29 |