**1. 捕获异常**
```scala
try{}catch{ case ex:Exception => {}}finally{}
```
```scala
def main(args: Array[String]): Unit = {
try {
val y = 100
val x = y / 0
println(y)
} catch {
case ex:ArithmeticException => {
ex.printStackTrace() // java.lang.ArithmeticException: / by zero
}
case ex:IOException => {
ex.printStackTrace()
}
case ex:Exception => {
ex.printStackTrace()
}
} finally {
println("Exiting finally...") // Exiting finally...
}
}
```
<br/>
**2. 抛出异常**
```scala
throw new Exception
```
```scala
def main(args: Array[String]): Unit = {
val x = 3
if (x > 2) throw new Exception("3大于2") // Exception in thread "main" java.lang.Exception: 3大于2
}
```
<br/>
**3. Either[A, B]处理异常**
* Either[A, B] 表示要么包含一个类型为A的实例,要么包括一个类型为B的实例;
* Either只有两个子类型:Left、Right,如果Either[A, B]对象包含的是A的实例,则它是Left实例,否则是Right实例;
* Either用于异常处理时,一般约定:Left 代表出错的情况,Right 代表成功的情况;
```scala
object App{
def main(args: Array[String]): Unit = {
def divide(x:Int):Either[String, Int] = {
if (x == 0)
Left("除数不能为0")
else
Right(100/x)
}
def matchTest(x:Int)=divide(x) match {
case Left(errMsg) => println(errMsg)
case Right(result) => println(result)
}
matchTest(0) // 除数不能为0
matchTest(2) // 50
}
}
```
<br/>
**4. allCatch处理异常**
```scala
object App{
def main(args: Array[String]): Unit = {
scala.util.control.Exception.allCatch.opt("42".toInt) // Some(42)
scala.util.control.Exception.allCatch.opt("42a".toInt) // None
scala.util.control.Exception.allCatch.toTry("42".toInt) // 42
scala.util.control.Exception.allCatch.toTry("42a".toInt) // Failure (e)
scala.util.control.Exception.allCatch.withTry("42".toInt) // Success(42)
scala.util.control.Exception.allCatch.withTry("42a".toInt) // Failure (e)
scala.util.control.Exception.allCatch.either("42".toInt) // Right(42)
scala.util.control.Exception.allCatch.either("42a".toInt) // Left(e)
}
}
```
<br/>
**5. failAsValue处理异常**
当发生异常时,会提供一个默认值。
```scala
object App{
def main(args: Array[String]): Unit = {
val result = scala.util.control.Exception.failAsValue(classOf[Exception])(-9999)("42a".toInt)
println(result) // -9999
}
}
```
- Scala是什么?
- Scala特性
- 开发环境搭建
- 环境搭建
- windows下的环境搭建
- IntelliJ IDEA环境搭建
- Scala关键字
- Hello, World
- 数据类型
- 数据类型
- 数据类型层次结构
- 字面量
- Null类型
- Nothing类型
- Unit类型
- 变量与常量
- type定义类型别名
- 字符串插值器
- 条件控制
- 循环控制
- 数组
- 元组
- 集合
- 集合分类
- List常用操作
- Set常用操作
- Map常用操作
- 函数
- 函数声明与调用
- 函数与方法的区别
- 函数注意事项
- 匿名函数
- 可变参数
- 高阶函数
- 中置表达式
- 函数嵌套
- 函数科里化
- 隐式参数
- 隐式函数
- 闭包
- 类和对象
- Java与Scala的比较
- 有关类与对象概念
- 类
- 类的定义和调用
- 类的继承
- 抽象类
- 单例对象
- 伴生对象和伴生类
- 特质
- 定义特质
- 混入特质
- 抽象类与特质的选择
- 自身类型
- 依赖注入
- this别名
- 样例类
- 枚举类
- 泛型类
- 包与包对象
- 模式匹配
- 基本语法
- 匹配模式
- 偏函数
- 注解
- 运算符
- 正则表达式
- 隐式类
- 异常处理
- 高级类型
- 结构类型
- 复合类型