当前位置:网站首页>Scala 高阶(十):Scala中的异常处理
Scala 高阶(十):Scala中的异常处理
2022-07-29 06:52:00 【百思不得小赵】
大家好,我是百思不得小赵。
创作时间:2022 年 7 月 27 日
博客主页: 点此进入博客主页
—— 新时代的农民工
—— 换一种思维逻辑去看待这个世界
今天是加入CSDN的第1243天。觉得有帮助麻烦点赞、评论、️收藏
Scala中的异常机制语法处理上和 Java 类似,但是又不尽相同。
一、异常概述
- 异常机制:程序在执行过程中发生了不正常的情况。
代码演示:
public class ExceptionText {
public static void main(String[] args) {
int a=100;
int b=0;
System.out.println(a/b);
}
}
运行结果:

二、回顾Java中的异常机制
Java中异常处理有两种方式
- 在方法声明的位置上,使用throws关键字,抛给上一级。谁调用我,我就抛给谁。抛给上一级。
public class ExceptionText {
public static void main(String[] args) throws Exception{
int a=100;
int b=0;
divide(a,b);
}
public static void divide(int a, int b) throws Exception{
int c = a / b;
System.out.println(c);
}
}
- 使用try…catch语句进行异常的捕捉。
public class ExceptionText {
public static void main(String[] args){
int a=100;
int b=0;
try {
divide(a,b);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void divide(int a, int b) throws Exception{
int c = a / b;
System.out.println(c);
}
注意:
1.Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。
2.try语句中某一行出现异常该行后续代码不执行try…catch捕获后,后续代码可执行。
try…catch和finally概述
- 语法格式:
try {
}catch(OneException e) {
}catch(TwoException e) {
}finally {
}
try 中包含了可能产生异常的代码
try 后面是 catch,catch 可以有一个或多个,catch 中是需要捕获的异常
finally 表示:不管是出现异常,还是没有出现异常,finally 里的代码都执行,finally 和 catch
可以分开使用,但 finally 必须和 try 一块使用
try {
}finally {
}
catch(异常1 | 异常2 |异常3 |......)jdk8新特性!!
示例代码(1):
public class ExceptionText {
public static void main(String[] args){
int a=100;
int b=0;
try {
divide(a,b);
//上一行代码有异常,直接进入catch里面!!
System.out.println("我能执行吗?");
} catch (Exception e) {
System.out.println("被0除了!!");
}
}
public static void divide(int a, int b) throws Exception{
int c = a / b;
System.out.println(c);
}
}
运行结果:
被0除了!!
示例代码(2):
public class ExceptionText {
public static void main(String[] args){
int a=100;
int b=0;
try {
divide(a,b);
//上一行代码有异常,直接进入catch里面!!
System.out.println("我能执行吗?");
} catch (Exception e) {
System.out.println("被0除了!!");
}finally {
System.out.println("finally执行了!!");
}
}
public static void divide(int a, int b) throws Exception{
int c = a / b;
System.out.println(c);
}
}
运行结果:
被0除了!!
finally执行了!!
throws与try…catch如何选择?
需要上报异常使用throws,需要捕获异常时使用try…catch进行捕获!!
finally重要面试题
示例代码(3):
public class FinallyText {
public static void main(String[] args) {
System.out.println(n());
}
public static int n(){
int i=100;
try {
return i;
}finally {
i++;
}
}
}
三、Scala中的异常机制
- 将会发生异常的代码封装在
try块中。在try块之后使用了一个catch处理程序来捕获异常。如果发生任何异常,catch处理程序将处理它,程序将不会异常终止。 - Scala 的异常的工作机制和 Java 一样,但是 Scala 没有“
checked(编译期)”异常,即 Scala没有编译异常这个概念,异常都是在运行的时候捕获处理。 - 异常捕捉的机制与其他语言中一样,如果有异常发生,catch 子句是按次序捕捉的。因此,在 catch 子句中,越具体的异常越要靠前,越普遍的异常越靠后,如果把越普遍的异常写在前,把具体的异常写在后,在 Scala 中也不会报错,但这样是非常不好的编程风格。
finally子句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,一般用于对象的清理工作,这点和 Java 一样。- 用
throw关键字,抛出一个异常对象。所有异常都是Throwable的子类型。throw表达式是有类型的,就是Nothing,因为Nothing是所有类型的子类型,所以throw表达式可以用在需要类型的地方。 - java 提供了
throws关键字来声明异常。可以使用方法定义声明异常。它向调用者函数提供了此方法可能引发此异常的信息。它有助于调用函数处理并将该代码包含在try-catch块中,以避免程序异常终止。在 Scala 中,可以使用 throws 注解来声明异常。
def main(args: Array[String]): Unit = {
f11()
}
@throws(classOf[NumberFormatException])
def f11()={
"abc".toInt
}
示例代码(4):
object Test_Exception {
def main(args: Array[String]): Unit = {
try{
val n =10 /0;
}catch {
case e: ArithmeticException =>{
println("发生算数异常")
}
case e: Exception => {
println("发生一般异常")
}
}finally {
println("处理结束")
}
}
}
本次Scala中异常机制分享的内容到这里就结束了,与Java异常机制相比较确实有很多灵活的地方,希望对大家有所帮助!!!
边栏推荐
猜你喜欢

Guess the number / / generate a random number for the first time

VMware16安装虚拟机遇到的问题

微服务远程调用

实现改变一段文字的部分颜色效果

Vmware16 create virtual machine: cannot create a new virtual machine, do not have permission to perform this operation

ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法

作业7.28 文件IO与标准IO

解决CSDN因版权不明而无法发布博客的问题
![[OpenGL] use of shaders](/img/73/1322afec8add6462ca4b82cb8112d1.png)
[OpenGL] use of shaders

CVPR2021| 基于自监督学习的多视图立体匹配 (CVPR2021)
随机推荐
个人博客系统(附源码)
thinkphp6 实现数据库备份
Student achievement ranking system based on C language design
2-统一返回类DTO对象
要不要满足客户所有的需求
ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
Nodejs安装教程
VMware16安装虚拟机遇到的问题
Latest 10 billion quantitative private placement list
后缀自动机(SAM)讲解 + Luogu p3804【模板】后缀自动机 (SAM)
pytorch的技巧记录
利用C语言巧妙实现棋类游戏——三子棋
Personal blog system (with source code)
[OpenGL] use of shaders
[C language brush leetcode] 1054. Bar code with equal distance (m)
Implementation of book borrowing management system based on C language
MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
gin 参数验证
Record - step on the pit - real-time data warehouse development - doris/pg/flink
[Charles' daily problems] when you open Charles, you can't use nails