**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別名
- 樣例類
- 枚舉類
- 泛型類
- 包與包對象
- 模式匹配
- 基本語法
- 匹配模式
- 偏函數
- 注解
- 運算符
- 正則表達式
- 隱式類
- 異常處理
- 高級類型
- 結構類型
- 復合類型