프로그램을 작성하는 과정하는 과정에서 실수를 하거나 사용자가 잘못된 값을 입력하면 오류가 발생할 수 있다. 예외라고 한다.
연산 오류, 숫자 포맷 오류 등과 같이 상황에 따라 개발자가 해결할 수 있는 오류를 말한다.
오류 자체를 수정할 수 있다는 것이 아니라 오류가 발생했을 때 차선책을 선택하는 것을 말한다.
InterruptedException
Thread.sleep(1000); 일정 시간 동안 해당 쓰레드를 일시정지 상태로 만드는 Thread 클래스의 정적 메서드이다. 일반 예외가 발생할 수 있기 때문에 반드시 예외 처리를 해야 한다.
ClassNotFoundException
Class.forName("패키지명.클래스명") 클래스를 동적으로 메모리에 로딩하는 메서드
Class 타입의 객체를 리턴한다.
public class A { // class가 없을 때 예외 발생 가능 -> NotFoundException처리해야 한다.
public static void main(String[] ar) {
Class cls=Class.forName("java.lang.Object");
}
}
public class A {
public static void main(String[] ar) {
InputStreamReader isr=new InputStreamReader(System.in);
isr.read(); // 입출력을 실행할 때 예외 발생 가능 IOException 처리가 필요하다.
}
}
public class A {
public static void main(String[] ar) {
FileInputStream fis=new FileInputStream("text.txt");
}
} // File이 없을 때 예외 발생 가능하다. FileNotFoundException 처리해야 한다.
class B {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class A {
public static void main(String[] ar) {
B b1 = new B();
B b2 = (B) b1.clone();
}
}
A클래스의 내부에서 clone() 메서드를 호출하기 위해 B 클래스에서 clone() 메서드를 오버라이딩 한다. class B가 Clonable 인터페이스를 구현하지 않으면 CloneNotSupportedException이 발생한다.
Add throws declaration과 Surround with try/catch 중에서 선택할 수 있는 창이 나타난다.
두 번째 항목을 선택하면 예외 처리 구문을 쉽게 추가할 수 있다.
문법 오류가 발생하지 않는다. 예외 처리 없이 컴파일과 실행이 가능하지만, 실행 중 예외가 발생하면 프로그램은 강제 종료된다.
public class A {
public static void main(String[] ar) {
System.out.println(3 / 0); // 연산되는 분모가 0이므로 예외가 발생한다.
}
}
class A {}
class B extends A {}
public class Test {
public static void main(String[] ar) {
A a=new A();
B b = (B) a; //Class 캐스팅이 불가능하면 ClassCastException 발생
}
}
public class A {
public static void main(String[] ar) {
int[] a = { 1, 2, 3 };
System.out.println(a[3]); // 인덱스의 범위를 넘어섰을 때 오류가 발생한다.
}
}
public class A {
public static void main(String[] ar) {
int num = Integer.parseInt("10!"); // Number(숫자)가 아닌 것을 숫자로 바꿀 때 예외가 발생한다.
}
}
정숫값 및 실숫값을 문자열로 변환할 때는 String.valueOf(정숫값) 또는 String.valueOf(실숫값)을 사용한다.
Boolean.parseBoolean("true"); // true
Boolean.parseBoolean("false"); // false
문자열을 불리언값으로 변경할 때는 문자열이 "true"인지만 확인하면 된다.
비어 있는 문자열도 false값으로 변환한다.
public class A {
public static void main(String[] ar) {
String a = null;
System.out.println(a.charAt(2));
}
}