Throwableμ΄λ©°, μ΄λ₯Ό μμνλ μμΈ ν΄λμ€κ° μΈ λΆλ₯λ‘ λλλ€.Error ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€Exception ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€RuntimeException ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€Error ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€Error ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€μ μμΈ μν©μ μμ€ν
μ€λ₯ μμ€μ μμΈ μν©μΌλ‘
νλ‘κ·Έλ¨ λ΄μμ μ²λ¦¬ ν μ μλ μμ€μ μμΈκ° μλλ€.
( μλ₯Ό λ€μ΄ νλλμ€ν¬μ 물리μ μ€λ₯κ° λ°μν΄ νμΌμ μ μ₯λ λ°μ΄ν°λ₯Ό μ½μ μ μλ μν© )
λ°λΌμ Error ν΄λμ€λ₯Ό μμνλ μμΈλ μ²λ¦¬μ λμμ΄ μλλ€.
( μ΄λ° μ νμ μμΈ λ°μ μ κ·Έλ₯ νλ‘κ·Έλ¨μ΄ μ’
λ£λλλ‘ λκ³ μ΄νμ μμΈμ νμ
νλ κ³Όμ μ κ°μ§)
ex)
VirtualMachineError : κ°μλ¨Έμ μ μ¬κ°ν μ€λ₯ λ°μIOError : μ
μΆλ ₯ κ΄λ ¨ν΄μ μ½λ μμ€ λ³΅κ΅¬κ° λΆκ°λ₯ν μ€λ₯ λ°μRuntimeException ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€RuntimeException ν΄λμ€λ Exception ν΄λμ€λ₯Ό μμνλ€.
λλΆλΆ μ½λ μ€λ₯λ‘ λ°μνλ μμΈμ΄λ€.
μ΄ μ νμ μμΈ λ°μμ μ½λμ μμ μ κ³ λ €ν΄μΌνλ€.
( νλ‘κ·Έλλ¨Έ μ€μμ μν μμΈμΈ κ²½μ°λ μ½λλ₯Ό μμ ν΄μΌ ν μν©μ΄μ§λ§, λλ¬Όκ² νλ‘κ·Έλ¨ μ¬μ©μμ μ€μλ‘ μΈν΄ μ΄ μ νμ μμΈκ° λ°μνλ κ²½μ°κ° μκΈ° λλ¬Έμ μμΈμ²λ¦¬λ₯Ό ν΄μΌ νλ κ²½μ°κ° μμ μ μλ€. )
μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμ§ μμλ μ»΄νμΌ μ€λ₯κ° λ°μνμ§ μλλ€.
β‘ λ°λμ μμΈ μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ μ ν X
ex)
ArithmeticExceptionClassCastExceptionIndexOutOfBoundsExceptionNegtiveArraySizeException : λ°°μ΄ μμ±μ κΈΈμ΄λ₯Ό μμλ‘ μ§μ νλ μμΈ λ°μNullPointerExceptionArrayStoreException : λ°°μ΄μ μ μ μΉ μμ μΈμ€ν΄μ€λ₯Ό μ μ₯νλ μμΈ λ°μException ν΄λμ€λ₯Ό μμνλ μμΈ ν΄λμ€java.io.IOException : μ
μΆλ ₯ κ΄λ ¨ μμΈ μν©μ νννλ μμΈ ν΄λμ€try catchλ¬Έμ ν΅ν΄ μμΈλ₯Ό μ§μ μ²λ¦¬thowsμ μ μΈμ μΆκ°ν΄ μμΈμ μ²λ¦¬λ₯Ό λκΉμ§κΈκΉμ§ μκ°ν μμΈ ν΄λμ€λ λͺ¨λ μλ°μμ μ μν ν΄λμ€μλ€.
νλ‘κ·Έλλ¨Έκ° μ§μ μμΈ ν΄λμ€λ₯Ό μ μνκ³ μ΄λ₯Ό κΈ°λ°μΌλ‘ νΉμ μν©μμ μμΈκ° λ°μνλλ‘ ν μ μλ€.
π νΉμ§
Exception ν΄λμ€λ₯Ό μμνλ€.try~catchλ¬ΈμΌλ‘ μ²λ¦¬λ₯Ό νκ±°λ throwsμ μΈμ ν΅ν΄ λκ²¨μΌ νλ€.throw μ μΈμ ν΅ν΄ μμΈ μΈμ€ν΄μ€λ₯Ό μ§μ λ§λ€κ³ μμΈ λ©μ»€λμ¦μ ꡬλμν€λλ‘ ν μ μλ€.import java.util.Scanner;
class ReadAgeException extends Exception { // μμΈ ν΄λμ€ μ μ
public ReadAgeException() {
super("μ ν¨νμ§ μμ λμ΄κ° μ
λ ₯λμμ΅λλ€."); // μμΈ μν©μ λν μμΈ λ©μΈμ§ μμ±
}
}
class MyExceptionClass {
public static int readAge() throws ReadAgeException {
Scanner kb = new Scanner(System.in);
int age = kb.nextInt();
if (age < 0)
throw (new ReadAgeException()); // throw μ μΈμ ν΅ν΄ μμΈ λ°μ
return age;
}
public static void main(String[] args) {
System.out.print("λμ΄ μ
λ ₯: ");
try {
int age = readAge();
System.out.printf("μ
λ ₯λ λμ΄: %d \n", age);
}
catch(ReadAgeException e) {
System.out.println(e.getMessage());
}
}
}
// μ€ν κ²°κ³Ό
λμ΄ μ
λ ₯: -11
μ ν¨νμ§ μμ λμ΄κ° μ
λ ₯λμμ΅λλ€.
// λ€μ μΈκ°μ μμΈ ν΄λμ€κ° μ μ
class FirstException extends Exception {...}
class SecondException extends FirstException {...}
class ThirdException extends SecondException {...}
// μ μΈμ’
λ₯ μμΈμ λν΄ try~catchλ¬Έ ꡬμ±
try {
...
}
catch(FirstException e) {...}
catch(SecondException e) {...}
catch(ThirdException e) {...}
// μ€ν κ²°κ³Ό
// μ»΄νμΌ μ€λ₯ λ°μ!!
π μ»΄νμΌ μ€λ₯κ° λλ μ΄μ ?
ThirdException β‘ SecondException β‘ FirstException β‘Exceptioncatch(FirstException e) {...}μμ λͺ¨λ μμΈμ μΈμ€ν΄μ€λ₯Ό μ²λ¦¬ν μ μκΈ° λλ¬Έμ, λλ²μ§Έ μΈλ²μ§Έ catch ꡬ문μ μ€νλ μΌμ΄ μλ€.π λͺ¨λ catchκ΅¬λ¬Έμ΄ μ€νλλ €λ©΄?
catch ꡬ문μ μμλ₯Ό λ°κΏμ€μΌ νλ€.try {
...
}
catch(ThirdException e) {...}
catch(SecondException e) {...}
catch(FirstException e) {...}
finallyπ 기본ꡬ쑰
try ~ finallyλ¬ΈμΌλ‘ λ μ μλ€.try {
...
}
finally {...}
try ~ catch ~ finallyλ₯Ό νλμ λ¬Έμ₯μΌλ‘ λ¬Άμ μ μλ€.try {
...
}
catch(Exception name) {
...
}
finally {...}
π νΉμ§
try μμΌλ‘ μ§μ
νλ©΄ finallyꡬ문μ 무쑰건 μ€ν λλ€.π κ΄λ ¨ μμ
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.BufferedWriter;
import java.io.IOException;
public class FinallyCase {
public static void main(String[] args) {
Path file = Paths.get("C:\\Users\\anneu\\Desktop\\study_java\\Simple.txt");
BufferedWriter writer = null;
try {
writer = Files.newBufferedWriter(file); // IOException λ°μ κ°λ₯
writer.write('A'); // IOException λ°μ κ°λ₯
writer.write('Z'); // IOException λ°μ κ°λ₯
}
catch(IOException e) {
e.printStackTrace();
}
finally {
try {
if(writer != null)
writer.close(); // IOException λ°μ κ°λ₯
}
catch(IOException e) {
e.printStackTrace();
}
}
}
}
IOException μμΈκ° λ°μν μ μκΈ° λλ¬Έμ finally λ΄μμ try~catchλ¬Έμ μμ±ν΄μ€μΌ νλ€.try-with-resourcestry-with-resourcesλ¬Έμ λΉ μ Έλμ€λ©΄μ μλμΌλ‘ μ’
λ£λλ€.// try-with-resourcesλ¬Έ κΈ°λ³Έ ꡬ쑰
try(resource) {
...
}
catch(Exception name) {
...
}
// λ μ΄μμ 리μμ€λ₯Ό κ°λ try-with-resourcesλ¬Έμ ꡬ쑰
try(resource1; resource2) { // μΈλ―Έμ½λ‘ μΌλ‘ 리μμ€ κ΅¬λΆ
...
}
catch(Exception name) {
...
}
π try-with-resources κΈ°λ°μ μ€ν λ° μ’ λ£ λμμ΄ λκΈ° μν 쑰건
java.lang .AutoCloseable μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μμΌλ©΄ λμμ΄ λ μ μλ€.π κ΄λ ¨ μμ
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.BufferedWriter;
import java.io.IOException;
class TryWithResourceCase {
public static void main(String[] args) {
Path file = Paths.get("C:\\Users\\anneu\\Desktop\\study_java\\Simple.txt");
try(BufferedWriter writer = Files.newBufferedWriter(file)) {
writer.write('A');
writer.write('Z');
}
catch(IOException e) {
e.printStackTrace();
}
}
}
μ°Έκ³
μ΄ν μλ° ch18-2 (μμΈμ²λ¦¬μ λν λλ¨Έμ§ μ€λͺ
λ€)
λ무 μ΄ν΄κ° μλΌμπ€