예외
int result = 10 / 0; //정수를 0으로 나눌 수 없다.(실수의 경우 가능)
System.out.print(result);
예외처리
try{
int result = 10 / 0; //정수를 0으로 나눌 수 없다. (실수의 경우 가능)
System.out.println(result);
}catch(ArithmeticException | IndexOutOfBoundsException e){
e.printStackTrace(); //에러 메시지를 출력한다.
}catch(NullPointerException e){
}catch(Exception e){
//모든 예외 처리
}
//파라미터가 여러개일 경우 , 가 아닌 |로 구분한다
Console 창에서 컴파일 에러 원인 확인
대표적인 예외
//IndexOutOfBoundsException -> 배열의 인덱스를 벗어났다.
int[] arr = new int[5];
System.out.println(arr[5]);
//NullPointerException -> null에서 참조했다.
String str = null;
System.out.println(str.charAt(1));
CallStack
| test2 |
| test1 |
| main |
public static void main(String[] args) {
FileInputStream fis null;
fis = new FileInputStream("d:file.txt"); // 컴파일 에러
//컴파일에러 Ctrl + 1
//Surround with try/catch
}
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("d:file.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{ //finally
fis.close(); //컴파일에러
}
}
// ↓
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("d:file.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
예외 발생 : try → catch → finally / 예외 미발생 : try → finally
try(FileOutputStream fos = new FileOutputStream("d:/file.txt")){
String str = "아무내용이나 써보자...";
byte[] bytes = str.getBytes();
for(int i = 0; i < bytes.length; i++){
fos.write(bytes[i]);
}
}catch(Exception e){
e.printStackTrace();
}
IOException ioe = new IOException( );
try {
throw ioe;
}catch (IOException e) {
e.printStackTrace();
} //이런게 있다 그냥 알아만두자
throw new NullPointerException(); //예외처리를 하지 않아도 된다.
public static void main(String[] args) {
try {
method();
}catch (IOException e) {
e.printStackTrace();
}
}
private static void method() throws IOException {
throw new IOException();
}