μμΈ(Exception)λ μ¬μ©μμ μλͺ»λ μ‘°μ, κ°λ°μμμλͺ»λ μ½λ©μΌλ‘ λ°μνκ² λλ νλ‘κ·Έλ¨ μ€λ₯λ₯Ό λ§νλ€.
μλ°μμλ μμΈκ° λ°μν κ°λ₯μ±μ΄ λμ μ½λλ₯Ό μ»΄νμΌ ν λ, μμΈμ²λ¦¬ μ 무λ₯Ό νμΈνλ€(try, catch λ±)
1. μμΈ ν΄λμ€
1. μΌλ°μμΈ
: μ»΄νμΌλ¬ μ²΄ν¬ μμΈ
νλ‘κ·Έλ¨ μ€ν μ, λ°μν κ°λ₯μ±μ΄ λμ μλ° μμ€μ μ»΄νμΌ νλ κ³Όμ μμ ν΄λΉ μμΈ μ²λ¦¬ μ½λκ° μλμ§ κ²μ¬νλ€.
μ¦, μ»΄νμΌ μ μλ¬μ²΄ν¬, RunTimeExceptionμ νμ ν΄λμ€ββ
2. μ€νμμΈ
: μ»΄νμΌλ¬ λ μ²΄ν¬ μμΈ
μ€ν μ μμΈ‘ν μ μμ΄ κ°μκΈ° λ°μνκΈ° λλ¬Έμ μ»΄νμΌ κ³Όμ μμ μμΈμ²λ¦¬κ° μλμ§ κ²μ¬νμ§ μλλ€.
μ¦, μ»΄νμΌ μ μλ¬μ²΄ν¬ μν¨, RunTimeExceptionμ νμ ν΄λμ€
μ»΄νμΌλ¬κ° 체ν¬νμ§ μκΈ° λλ¬Έμ μ€λ‘μ§ κ°λ°μμ κ²½νμ μν΄μ μμΈ μ²λ¦¬ μ½λλ₯Ό μμ±ν΄μΌ νλ€.
κ°λ°μκ° μ€ν μμΈμ λν΄ μ²λ¦¬ μ½λλ₯Ό λ£μ§ μμμ κ²½μ°, ν΄λΉ μμΈκ° λ°μνλ©΄ λ°λ‘ μλ¬κ° λ°μνκ³ νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€.
μ€νμμΈμ μ’ λ₯λ₯Ό λͺ κ°μ§ μ΄ν΄λ³΄μ.
- NullPointerException
: null κ°μ κ°λ μ°Έμ‘° λ³μλ‘ κ°μ²΄ μ κ·Ό μ°μ°μμΈ λνΈλ₯Ό μ¬μ©νμ λ λ°μνλ€. μ¦, κ°μ²΄κ° μλ μνμμ κ°μ²΄λ₯Ό μ¬μ©νλ €κ³ νλ λ°μνλ μμΈμ΄λ€.
- ArrayIndexOutOfBoundsException
: λ°°μ΄μμ μΈλ±μ€ λ²μλ₯Ό μ΄κ³Όν κ²½μ° λ°μνλ μμΈμ΄λ€.
- NumberFormatException
: νλ‘κ·Έλ¨μ κ°λ°νλ€λ³΄λ©΄ λ¬Έμμ΄λ‘ λμ΄μλ λ°μ΄ν°λ₯Ό μ«μλ‘ λ³κ²½νλ κ²½μ°κ° λ°μνλ€. μ΄λ, λ¬Έμμ΄μ μ«μλ‘ λ³νν λ, μ«μλ‘ λ³νλ μ μλ λ¬Έμκ° μμΌλ©΄ μ μμΈκ° λ°μνλ€.
- ClassCastException
: νμ λ³ν(Casting)μ μμ ν΄λμ€μ νμ ν΄λμ€ κ°μ λ°μνκ³ κ΅¬ν ν΄λμ€μ μΈν°νμ΄μ€ κ°μλ λ°μνλ€.(κ°μ νμ λ³ν)
μ κ΄κ³κ° μλλΌλ©΄ ν΄λμ€λ λ€λ₯Έ νμ μΌλ‘ λ³κ²½μ΄ λΆκ°λ₯ νκΈ° λλ¬Έμ μλ¬κ° λ°μνλ€.
μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°λ€.
Animal animal = new Dog();
Cat cat = (Cat) animal; // μλ¬λ°μ
2. μμΈ μ²λ¦¬ μ½λ
: μλ° μ»΄νμΌλ¬λ μμ€ νμΌμ μ»΄νμΌ ν λ μΌλ° μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λλ₯Ό λ°κ²¬νλ©΄ μ»΄νμΌ μλ¬λ₯Ό λ°μμμΌ κ°λ°μκ° κ°μ μ μΌλ‘ μμΈ μ²λ¦¬λ₯Ό μμ±νλλ‘ μꡬνλ€.
try-catch-finally λΈλ‘μ μμ±μ λ΄λΆμ λ©μλ λ΄λΆμμ μμ±λμ΄ μΌλ° μμΈμ μ€ν μμΈκ° λ°μν κ²½μ° μμΈ μ²λ¦¬λ₯Ό ν μ μλλ‘ ν΄μ€λ€.
try{
... //μμΈ λ°μ κ°λ₯ μ½λ
}catch(μμΈ ν΄λμ€ e){
... // μμΈ μ²λ¦¬
}finally{
... // μ μ μ€νλλ©΄, finally λΈλ‘ μ€ν, μλ΅κ°λ₯
}
finallyλ μ μ μ€νλλ©΄, μ€νλκ³ μλ΅μ΄ κ°λ₯νλ€. λν finallyλ return λ¬Έμ μ€νν΄λ finally λ νμ μ€νλλ€. λ°λΌμ νμ μ€νν λ΄μ©μ΄ μμ κ²½μ°μλ§ finallyλ₯Ό μμ±ν΄μ£Όλ©΄ λλ€.
# λ€μ€ catch λ¬Έ
: try λΈλ‘μμ λ€μν μμΈκ° λ°μν μ μλλ°, μ΄ κ²½μ°μλ λ€μ€ catch λΈλ‘μ ν΅ν΄ μ½λλ₯Ό μμ±νλ©΄ λλ€.
try{
ArrayindexOutOfBoundsException λ°μ
NumberFormatException λ°μ
}catch(ArrayindexOutOfBoundsException e){
... // μμΈ μ²λ¦¬
}catch(NumberFormatException e){
... // μμΈ μ²λ¦¬
}
νμ§λ§, catch λΈλ‘μ΄ μ¬λ¬κ°λΌκ³ ν μ§λΌλ λ¨ νλμ catch λΈλ‘λ§μ΄ μ€νλλ€.
try λΈλ‘μμ λ€λ°μ μΌλ‘ μμΈκ° λ°μνμ§ μκ³ , νλμ μμΈκ° λ°μνλ©΄ κ·Έ μ¦μ μ€νμ λ©μΆκ³ ν΄λΉ catch λ‘ μ΄λνλ κ²μ΄λ€.
λ€μ€ catch λΈλ‘μ μμ±ν λλ μμ μμΈ ν΄λμ€κ° νμ μμΈ ν΄λμ€λ³΄λ€ μλμͺ½μ μμΉν΄μΌνλ€.
μ¦, νμ μμΈ ν΄λμ€ → μμ μμΈ ν΄λμ€ μμΌλ‘ catchλ¬Έμ μμ±ν΄μΌνλ€.
μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°λ€.
try{
// μμΈ λ°μ
}catch(Exception e){
}catch(ArrayIndexOutOfBoundsException e){
}
μμ κ°μ΄ μμΈμ²λ¦¬λ₯Ό νκ² λλ©΄ λͺ¨λ μμΈκ° νλΌλ―Έν° Exception e κ³³μΌλ‘ μμμ λ°κΈ° λλ¬Έμ 첫 λ²μ§Έ λΈλ‘μΌλ‘λ§ μ νλμ΄μ μμ±μ΄ λλ€. λ λ²μ§Έ λΈλ‘μ μ μΈ μμ²΄κ° λμ§ μλ κ²μ΄λ€.
λ°λΌμ, λ€μκ³Ό κ°μ΄ μμ±ν΄μΌνλ€.
try{
// μμΈ λ°μ
}catch(ArrayIndexOutOfBoundsException e){
}catch(Exception e){
}
# μμΈ λ λκΈ°κΈ° (throws)
: try catch κ° κΈ°λ³Έμ μΈ μμΈ μ²λ¦¬μ§λ§, κ²½μ°μ λ°λΌμ throwsλ₯Ό ν΅ν΄ λ©μλ νΈμΆν κ³³μΌλ‘ μμΈλ₯Ό λ λκΈΈ μ μλ€.
ReturnVariable MethodName (ParameterVariable) throws μμΈ ν΄λμ€, μμΈ ν΄λμ€2{}
throws κ° λΆμ΄μλ λ©μλλ λ°λμ try λΈλ‘ λ΄μμλ§ νΈμΆλμ΄μΌ νλ€. κ·Έλ¦¬κ³ , catch λΈλ‘μμ λ λ겨 λ°μ μμΈλ₯Ό μ²λ¦¬ ν΄μΌνλ€.
μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°λ€.
public static void main(String[] args) {
try {
findClass();
} catch (ClassNotFoundException e) {
System.out.println("ν΄λμ€κ° μ‘΄μ¬νμ§ μμ΅λλ€.");
}
}
public static void findClass() throws ClassNotFoundException{
Class clazz = Class.forName("java.lang.String2");
}
try catch λ¬Έ λ§κ³ , main ν¨μμ throwλ₯Ό ν΅ν΄μλ μμΈμ²λ¦¬λ₯Ό ν μ μλ€.
public static void main(String[] args) throws ClassNotFoundException {
findClass();
}
public static void findClass() throws ClassNotFoundException{
Class clazz = Class.forName("java.lang.String2");
}
νμ§λ§ μ΄λ μ’μ§ μμ μμΈ μ²λ¦¬μ΄λ€. νλ‘κ·Έλ¨ μ¬μ©μλ νλ‘κ·Έλ¨μ΄ μ μ μλ μμΈ λ΄μ©μ μΆλ ₯νκ³ μ’ λ£λκ² ν΄μλ μλλ€.
[μΆμ²] νΌκ³΅μλ° p.444 ~ p.464