Scala - Xử lý ngoại lệ
Các ngoại lệ của Scala hoạt động giống như các ngoại lệ trong nhiều ngôn ngữ khác như Java. Thay vì trả về một giá trị theo cách thông thường, một phương thức có thể kết thúc bằng cách ném một ngoại lệ. Tuy nhiên, Scala không thực sự có các ngoại lệ được kiểm tra.
Khi bạn muốn xử lý các ngoại lệ, bạn sử dụng khối try {...} catch {...} giống như bạn làm trong Java ngoại trừ khối catch sử dụng đối sánh để xác định và xử lý các ngoại lệ.
Ngoại lệ ném
Việc ném một ngoại lệ trông giống như trong Java. Bạn tạo một đối tượng ngoại lệ và sau đó bạn ném nó vớithrow từ khóa như sau.
throw new IllegalArgumentException
Bắt ngoại lệ
Scala cho phép bạn try/catch bất kỳ ngoại lệ nào trong một khối duy nhất và sau đó thực hiện đối sánh mẫu với nó bằng cách sử dụng casecác khối. Hãy thử chương trình ví dụ sau để xử lý ngoại lệ.
Thí dụ
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Demo {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException =>{
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Missing file exception
Hành vi của điều này try-catchbiểu thức giống như trong các ngôn ngữ khác với ngoại lệ. Phần thân được thực thi và nếu nó ném một ngoại lệ, mỗicatch mệnh đề được thử lần lượt.
Mệnh đề cuối cùng
Bạn có thể bao bọc một biểu thức bằng một finallynếu bạn muốn làm cho một số mã thực thi bất kể biểu thức kết thúc như thế nào. Hãy thử chương trình sau.
Thí dụ
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Demo {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException => {
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
} finally {
println("Exiting finally...")
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Missing file exception
Exiting finally...