在程序执行期间发生编程异常,在程序执行期间发生错误。该错误中断了代码的执行顺序。通过将代码绕过异常处理程序来处理异常。这样可以处理异常并减少错误的发生。
Scala中的异常处理与任何其他编程语言的异常具有相同的工作方式,但实现方式略有不同。Scala仅支持未检查的异常,即,Scala没有内置检查的异常。
异常是从throwable继承的,后者还具有错误的子类。并且异常具有一个称为未检查异常的子类,这在编程中非常有用。
异常的处理方式与其他编程语言(如Java)相同,即抛出异常,然后创建一个捕获该异常的块。
Scala异常处理如何工作?
假设您的Scala代码中发生异常。编译器将保留执行,并将流程提供给异常处理程序,由其进行工作。并运行代码,否则,程序将终止。
Scala还使用try-catch块来处理异常。与在Java中一样,Scala也使用try块放置可能有错误的代码,然后使用catch或finally块来处理抛出的错误。
Scala中的throwing exceptions需要关键字throw,它创建一个异常对象。
尝试抓块
Scala还使用try-catch块来处理程序执行期间可能出现的异常。
使用try-catch块进行的错误处理以下列方式工作:可能引起另一个代码的代码位于try块中。根据异常的类型,代码引发缓存日志的代码具有在异常发生时执行的异常对象。
例如,如果我们在Scala try块中放置一个除法,并且该表达式的计算结果为零除以2,则将引发需要处理的算术异常。因此,在我们的Scala catch块中,我们将定义算术异常,该异常将在发生异常时捕获,并根据异常的发生执行以下代码。
语法:
try{ //code that may contain an exception. } catch { case a : typeOfException => // code to be executed }
示例
import java.io.IOException object MyClass { def main(args:Array[String]) { var i= 3 var j = 3 try { var N = 5/i - j println("The division is successful the value is :" + 5/(i-j)) } catch { case e : ArithmeticException => { println("Arithmetic exception occurred.") } } } }
输出结果
The above code has 2 two outputs based on the value of I and J case 1 : i= j Arithmetic exception occurred case 2 : i !=j The division is successful the value is -5 Note: **the value is evaluated based on the value entered in the code
有时在编程中,有些情况是我们不知道发生异常的可能性,或者某些异常没有异常类或无法捕获的情况。在这种情况下,我们将在异常处理中使用Final关键字。的最后块是运行时即其卡扣面时运行没有已知的例外情况下,被匹配的代码中的错误处理的块。即使没有错误,finally代码也将最终显示。它将与这两种情况下运行时,尝试不抛出异常,而当他们试图抛出异常和捕捉块运行。
语法:
try{ //code that may contain an exception. } catch { case a : typeOfException => // code to be executed } finally { // This block will definitely run }
展示catch块如何工作的示例?
import java.io.IOException object MyClass { def main(args:Array[String]) { var i= 3 var j = 3 try{ var N = 5/i - j println("the division is successful the value is :" + 5/(i-j)) } catch{ case e : ArithmeticException =>{ println("Arithmetic exception occurred.") } } finally { println("The finally code that runs in all cases...") } } }
输出结果
Arithmetic exception occurred. The finally code that runs in all cases...
代码逻辑:
上面的代码用于显示发生错误时finally语句如何运行?在这个例子中,我们有一个try块包含由零算术错误鸿沟,那么这个错误是使用Scala的处理catch块用于打印“算术异常发生”。在执行该catch块之后,将调用finally块,该块将打印“在所有情况下均运行的Final代码”。在执行完最终代码之后,程序将返回其原始流程。