▶️ try-catch의 구조
fun method1() {
try {
예외가 발생할 가능성이 존재하는 코드
} catch(예외종류) {
예외가 발생했을때 처리할 코드(종료하지말고 이 코드를 대신 실행해)
}
}
▶️ throw의 구조
fun method1(num1:Int) {
if(num1 > 10) {
throw 예외종류 // 예외가 발생했을 때 어떤 처리를 하는 건 아니고, 예외를 던지기만 해서 예외가 발생했을 때 비정상 종료되지만 않게 안정적이게 하는 역할
}
}
< 예시 >
숫자를 입력해야하는데 실수로 문자를 입력했을때의 예외를 처리해 보자.
▶️ 예외 시 발생한 오류 화면
▶️ 예외를 처리한 상황 (try-catch)
fun main() {
while(true) { // while(true)는 break 나올 때까지는 무한루프되는 반복문
try {
var num1 = readLine()!!.toInt()
println("내가 입력한 숫자는 ${num1}입니다")
break // 제대로 입력하면 가장 가까운 반복문인 while문에서 탈출
} catch(e:java.lang.NumberFormatException) {
println("숫자를 입력하세요") // 제대로 입력하지 않고 예외가 발생되면 예외(catch)로 떨어져서 제대로 입력할 때까지 반복문을 돌며 숫자를 입력하라고 함
}
}
}
▶️ 예외를 처리한 상황 (try-catch-finally)
fun main() {
while(true) {
try {
var num1 = readLine()!!.toInt()
println("내가 입력한 숫자는 ${num1}입니다")
break
} catch(e:java.lang.NumberFormatException) {
println("숫자를 입력하세요")
} finally { // try, catch와 상관없이 항상 실행됨
println("키보드와의 연결은 정상적입니다")
}
}
}