063_异常处理
我么之前学的异常分为2类,一种是编译时异常,一种是运行时异常,
但是这个编译时异常也是可能的情况下的异常
所以在scala中,只有一种异常就是运行时异常
看一下java中的
package com.atguigu.chapter05.myexception;
public class JavaExceptionDemo01 {
public static void main(String[] args) {
try {
// 可疑代码
int i = 0;
int b = 10;
int c = b / i; // 执行代码时,会抛出ArithmeticException异常
} catch (ArithmeticException ex) {
ex.printStackTrace();
} catch (Exception e) { //java中不可以把返回大的异常写在前,否则报错!!
e.printStackTrace();
} finally {
// 最终要执行的代码
System.out.println("java finally");
}
System.out.println("ok~~~继续执行...");
}
}
finally一般用来释放资源
package com.atguigu.chapter05.myexception
object ScalaExceptionDemo {
def main(args: Array[String]): Unit = {
try {
val r = 10 / 0
} catch {
//说明
//1. 在scala中只有一个catch
//2. 在catch中有多个case, 每个case可以匹配一种异常 case ex: ArithmeticException
//3. => 关键符号,表示后面是对该异常的处理代码块
//4. finally 最终要执行的
case ex: ArithmeticException => {
println("捕获了除数为零的算数异常")
}
case ex: Exception => println("捕获了异常")
} finally {
// 最终要执行的代码
println("scala finally...")
}
println("ok,继续执行~~~~~")
}
}
package com.atguigu.chapter05.myexception
object ThrowDemo {
def main(args: Array[String]): Unit = {
// val res = test()
// println(res.toString)
//如果我们希望在test() 抛出异常后,代码可以继续执行,则我们需要处理
try {
test()
} catch {
case ex: Exception => {
println("捕获到异常" + ex.getMessage)
println("xxxx")
}
case ex: ArithmeticException => println("得到一个算术异常~~")
} finally {
//写上对try{} 中的资源的分配
}
println("ok~~~~~")
}
def test(): Nothing = {
throw new ArithmeticException("算术异常") //Exception("异常NO1出现~")
}
}
package com.atguigu.chapter05.myexception
object ThrowsComment {
def main(args: Array[String]): Unit = {
f11()
}
@throws(classOf[NumberFormatException]) //等同于Java NumberFormatException.class
def f11() = {
"abc".toInt
}
}