📜  斯卡拉 |异常处理

📅  最后修改于: 2022-05-13 01:54:52.112000             🧑  作者: Mango

斯卡拉 |异常处理

什么是例外?

异常是在程序执行期间(即在运行时)发生的不希望的或意外事件。这些事件改变了程序在执行中的流控制。这些情况并不太危险,可以由程序处理。

异常层次结构

所有异常和错误类型都是Throwable类的子类,后者是层次结构的基类。一个分支由Exception领导。此类用于用户程序应捕获的异常情况。 NullPointerException 是此类异常的一个示例。 Java运行时系统(JVM)使用另一个分支Error来指示与运行时环境本身(JRE)有关的错误。 StackOverflowError 就是此类错误的一个示例。
异常层次结构

Scala 中的异常

Scala 中的异常处理以不同的方式实现,但它的行为与Java完全一样,并且可以与现有的Java库无缝协作。在 scala 中,所有异常都是unchecked 。没有检查异常的概念 Scala 在选择是否捕获异常的能力方面提供了很大的灵活性。

注意:在编译时,在Java中会检查“已检查”异常。如果一个方法可能抛出一个IOException ,我们必须声明它。

Scala 异常是如何工作的?

scala 中的异常的工作方式与 C++ 或Java中的相同。当异常发生时,如前面示例中所示的 ArithmeticException,当前操作被中止,运行时系统寻找可以接受 ArithmeticException 的异常处理程序。使用最里面的此类处理程序继续控制。如果不存在这样的处理程序,则程序终止。

抛出异常
抛出异常。它看起来与Java中的相同。我们创建一个异常对象,然后使用 throw 关键字将其抛出。
句法:

throw new ArithmeticException

try/catch构造
Scala 中的 try/catch 结构与Java中的不同,Scala 中的 try/catch 是一个表达式。 Scala 中产生值的异常可以在 catch 块中进行模式匹配,而不是为每个不同的异常提供单独的 catch 子句。因为 Scala 中的 try/catch 是一个表达式。这是一个在 Scala 中使用常规 try-catch 块处理异常的示例。

// Scala program of try-catch Exception 
import java.io.IOException
  
// Creating object
object GFG
{  
    // Main method
    def main(args:Array[String])
    {  
        try
        {
            var N = 5/0
               
        } 
        catch 
        {
            // Catch block contain cases. 
            case i: IOException => 
            {
                println("IOException occurred.")
            }
            case a : ArithmeticException => 
            {
                println("Arithmetic Exception occurred.")
            }
   
        }
   
    }  
}  

输出:

Arithmetic Exception occurred.

在 Scala 中,单个 catch 块可以处理各种异常,从而提供了灵活性。

finally子句:

如果我们希望代码的某些部分不管表达式如何终止都执行,我们可以使用 finally 块。这是上面的一个例子:

// Scala program of finally Exception 
  
// Creating object
object GFG 
{
    // Main method
    def main(args: Array[String]) 
    {
        try
        {
            var N = 5/0
        } 
        catch
        {
            // Catch block contain case.
            case ex: ArithmeticException => 
            {
                println("Arithmetic Exception occurred.")
            }
        }
        finally
        {
            // Finally block will execute 
            println("This is final block.")
        }
    }
}

输出:

Arithmetic Exception occurred.
This is final block.