063_异常处理

1616904914950

我么之前学的异常分为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~~~继续执行...");
    }
}

1616905181536

finally一般用来释放资源


1616905445307

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,继续执行~~~~~")

  }
}

1616905541009

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出现~")
  }

}

1616905767488

1616905883653

package com.atguigu.chapter05.myexception

object ThrowsComment {
  def main(args: Array[String]): Unit = {
    f11()
  }

  @throws(classOf[NumberFormatException]) //等同于Java NumberFormatException.class
  def f11() = {
    "abc".toInt
  }

}


results matching ""

    No results matching ""