μ€λ₯
λ μμ€ν
μ΄ μ’
λ£λμ΄μΌ ν μμ€μ μν©κ³Ό κ°μ΄ μμ΅ν μ μλ μ¬κ°ν λ¬Έμ λ₯Ό μλ―Έν©λλ€.
κ°λ°μκ° λ―Έλ¦¬ μμΈ‘νμ¬ λ°©μ§ν μ μμ΅λλ€.
μμΈ
λ κ°λ°μκ° κ΅¬νν λ‘μ§μμ λ°μν μ€μλ μ¬μ©μμ μν₯μ μν΄ λ°μν©λλ€.
μ€λ₯μ λ¬λ¦¬ κ°λ°μκ° λ―Έλ¦¬ μμΈ‘νμ¬ λ°©μ§ ν μ μκΈ° λλ¬Έμ μν©μ λ§λ μμΈ μ²λ¦¬(Exception Handle)μ ν΄μΌν©λλ€.
π‘ Throwable
Errorμ Exception λͺ¨λ μλ°μ μ΅μμ ν΄λμ€μΈ Objectλ₯Ό μμ λ°μ΅λλ€.
κ·Έλ¦¬κ³ κ·Έ μ¬μ΄ Throwableμ΄λΌλ ν΄λμ€λ μ΄ ν΄λμ€μ κ°μ²΄μ μ€λ₯λ μμΈμ λν λ©μμ§λ₯Ό λ΄κ±°λ,
μμΈκ° μ°κ²°λ λ(Chained Exception) μ°κ²°λ μμΈμ μ 보λ€μ κΈ°λ‘νλ μν μ μνν©λλ€.
μ΄ Throwable κ°μ²΄κ° κ°μ§ μ 보μ ν μ μλ νμλ getMessage()μ printStackTrace()κ° μμ΅λλ€.
μλ¬(Error)λ μ»΄ν¨ν° νλμ¨μ΄μ μ€λμ λλ κ³ μ₯μΌλ‘ μΈν΄ μμ©νλ‘κ·Έλ¨μ μ΄μμ΄ μκ²Όκ±°λ JVM μ€νμ λ¬Έμ κ° μκ²Όμ κ²½μ° λ°μνλ κ²μ
λλ€.
μμ€ν
λ 벨μμ λ°μνκΈ° λλ¬Έμ κ°λ°μκ° λ―Έλ¦¬ μμΈ‘νμ¬ μ²λ¦¬ν μ μκΈ° λλ¬Έμ, μ ν리μΌμ΄μ
μμ μ€λ₯μ λν μ²λ¦¬λ₯Ό μ κ²½ μ°μ§ μμλ λ©λλ€.
StackOverflowError
: νΈμΆμ κΉμ΄κ° κΉμ΄μ§κ±°λ μ¬κ·κ° μ§μλμ΄ stack overflow λ°μ μ λμ Έμ§λ μ€λ₯μ λλ€.OutOfMemoryError
: JVMμ΄ ν λΉλ λ©λͺ¨λ¦¬μ λΆμ‘±μΌλ‘ λ μ΄μ κ°μ²΄λ₯Ό ν λΉν μ μμ λ λμ Έμ§λ μ€λ₯μ λλ€. Garbage Collectorμ μν΄ μΆκ°μ μΈ λ©λͺ¨λ¦¬κ° ν보λμ§ λͺ»νλ μν©μ΄κΈ°λ ν©λλ€.
μμΈ(Exception)λ κ°λ°μκ° κ΅¬νν λ‘μ§μμ λ°μν μ€μλ μ¬μ©μμ μν₯μ μν΄ λ°μν©λλ€.
μ»΄νμΌ μ λ°μν μ μλ μΌλ° μμΈ Exceptionμ μ€ν μ€μ λ°μνλ λ°νμ μμΈ RuntimeExceptionλ‘ κ΅¬λΆλ©λλ€.
μΌλ° μμΈλ μμ€μ½λλ₯Ό .class
νμΌλ‘ μ»΄νμΌνλ κ³Όμ μμ JVMμ΄ λμ§λ μλ¬λ‘, λλΆλΆ μμ€μ½λ μ체μ λ¬Έλ²μ μ€λ₯λ‘ μΈν΄ λ°μν©λλ€.
νλ‘κ·Έλ¨ μ체μμ μ²λ¦¬ν μ μλ λ°©λ²μ μμ΅λλ€.
μΌλ° μμΈμ μλ‘λ ClassNotFoundException
, IllegalAccessException
, NoSuchMethodException
λ±μ΄ μμ΅λλ€.
IllegalArgumentException
: λ©μλκ° νκ°λμ§ μκ±°λ λΆμ μ ν argumentλ₯Ό λ°μμ κ²½μ°μ λμ Έμ§λ/λμ§ μ μλ μμΈμ λλ€.
λ°νμ μμΈλ λ¬Έλ²μ μΈ μ€λ₯κ° μμ΄ μ»΄νμΌ μμλ μ μμ μΌλ‘ μ»΄νμΌλμ§λ§ νλ‘κ·Έλ¨μ μ€ννλ κ³Όμ μμ λ°μνλ μλ¬λ₯Ό λ§ν©λλ€.
μ΄λ κ°λ°μκ° μ§μ μ€λ₯λ₯Ό νμΈνμ¬ μ²λ¦¬ν΄μΌ ν©λλ€.
λ°νμ μμΈμ μλ‘λ NullPointerException
, ArithmeticException
, IndexOutOfBoundsException
λ±μ΄ μμ΅λλ€.
NullPointerException
: κ°μ²΄κ° νμν κ²½μ°μΈλ° μμ©νλ‘κ·Έλ¨μ΄ nullμ μ¬μ©νλ €κ³ μλν κ²½μ° λμ Έμ§λ/λμ§ μ μλ μμΈμ λλ€.
μμΈλ μ€λ₯μ λ¬λ¦¬ κ°λ°μκ° λ―Έλ¦¬ μμΈ‘νμ¬ λ°©μ§ν μ μκΈ° λλ¬Έμ μν©μ λ§λ μμΈμ²λ¦¬κ° νμν©λλ€.
μμΈ μ²λ¦¬ Exception Handle
μμΈκ° λ°μνμ λ try
... catch
... finally
λΌλ ν€μλλ‘ μμΈλ₯Ό μ²λ¦¬νκ±°λ λ©μλλ₯Ό νΈμΆν κ³³μΌλ‘ λμ§ μ μμ΅λλ€.
try
: μμΈκ° λ°μν λ§ν μ½λκ° μμ±λ©λλ€.catch
: μμΈκ° λ°μλμμ λ μ²λ¦¬νλ λμμ λͺ μν©λλ€. catch λΈλ‘μ μ¬λ¬ κ°κ° μμ μ μμ΅λλ€.finally
: μμΈ λ°μ μ 무μ μκ΄ μμ΄ κ³΅ν΅μΌλ‘ μνλμ΄μΌ ν μμ νμΌμ μμ λ± λ·μ 리 μ½λκ° μμ±λ©λλ€.
try {
// μμΈκ° λ°μλ λ§ν μ½λ
} catch(FileNotFoundException e) { // FileNotFoundExceptionμ΄ λ°μνλ€λ©΄
} catch(IOException e) { // IOExceptionμ΄ λ°μνλ€λ©΄
} catch(Exception e) { // Exceptionμ΄ λ°μνλ€λ©΄
} finally {
// μ΄λ€ μμΈκ° λ°μνλ λ§λ 무쑰건 μ€ν
}
μμΈλ₯Ό λ°λ‘ μ²λ¦¬νμ§ μκ³ μμΈλ₯Ό λμ Έμ μ΄λ€ μμΈκ° λ°μνλμ§ μ리λ μ©λλ‘ μ¬μ©ν©λλ€.
public static void divide(int a,int b) throws ArithmeticException {
if(b==0) throw new ArithmeticException("0μΌλ‘ λλ μλ μλ€λκΉ?");
int c=a/b;
System.out.println(c);
}
public static void main(String[] ar){
int a=10;
int b=0;
divide(a,b);
}
β
throw vs throws
π‘ throw
λ©μλ λ΄μμ μμΈλ₯Ό λ°μμν€λ λ° μ¬μ©λ©λλ€.
throw new FoolException()
π‘ thorws
λ©μλ μ μΈλΆμμ μ¬μ©λλ©°, ν΄λΉ λ©μλκ° μ²λ¦¬νμ§ μμ μμΈλ₯Ό νΈμΆμμκ² μ λ¬ν¨μ λνλ
λλ€.
public void sayNick(String nick) throws FoolException