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...