55_异常处理

异常处理
* 语法
* try {
* 可疑代码
* } catch {
* 捕获异常
* case 异常1 => {}
* case 异常2 => {}
* } finally {
* 最终执行
* }
* 说明
* 1. try 代码块
* 将可疑代码封装在try代码块中,如果发生异常,catch 代码块会处理这个异常
* 2. catch 代码块
* 1. catch 代码处理发生的异常,如果不将异常抛出,可以确保程序的继续执行
* 2. scala处理的都是运行时异常,没有编译异常(checked)
* 3. 当异常发生时,按case的顺序捕获异常,范围小的在前面,范围大的在后面
* 3. finally 代码块
* 1. 不管是否发生异常,都会执行 finally代码块,一般用于资源关闭
* 4. throw 抛出一个异常
* 1. 作用 抛出异常对象,停止程序 相当于 exit(1)
* 2. 所有异常类都是Throwable的子类
* 3. throw new 异常类 的返回类型为Nothing
*
*
* */
/*
* 异常处理
*    语法
*       try {
*          可疑代码
*       } catch {
*          捕获异常
*          case 异常1 => {}
*          case 异常2 => {}
*       } finally {
*          最终执行
*       }
*    说明
*       1. try 代码块
*          将可疑代码封装在try代码块中,如果发生异常,catch 代码块会处理这个异常
*       2. catch 代码块
*          1. catch 代码处理发生的异常,如果不将异常抛出,可以确保程序的继续执行
*          2. scala处理的都是运行时异常,没有编译异常(checked)
*          3. 当异常发生时,按case的顺序捕获异常,范围小的在前面,范围大的在后面
*       3. finally 代码块
*          1. 不管是否发生异常,都会执行 finally代码块,一般用于资源关闭
*       4. throw 抛出一个异常
*          1. 作用 抛出异常对象,停止程序 相当于 exit(1)
*          2. 所有异常类都是Throwable的子类
*          3. throw new 异常类 的返回类型为Nothing
*
*
* */

// 1. 捕获异常 - 继续执行
object ExcepTest extends App {
  try {
    val x = 10 / 0
  } catch {
    //捕获异常
    case e1: ArithmeticException => {
      println("log >>>>>>> 发生了ArithmeticException异常")
    }
    case e2: Exception => {
      println("log >>>>>>> 发生了Exception异常")
    }

  } finally {
    println("关闭异常")
  }
  println("继续执行")


}

// 2. 方法中 - 抛出异常
object ThrowTest extends App {
  println(div(1, 0))


  // 1. 定义方法,抛出异常
  def div(x: Int, y: Int) = {
    try {
      x / y
    } catch {
      case e: ArithmeticException => {
        println("发生了异常")
        throw new ArithmeticException("分母为0")
      }
    }
  }


}
java中的异常捕获
* 说明
* 1. Java语言按照try-catch-finally的方式来处理异常
* 2. 不管有没有捕获异常,都会执行finally,因此finally中常用来关闭资源
* 3. 可以有多个catch,分布捕获对应的异常,把范围小的异常写在类的前面,范围大的异常写在后面(否则有编译报错)
package main.java;

/*
 *  java中的异常捕获
 *     说明
 *        1. Java语言按照try-catch-finally的方式来处理异常
 *        2. 不管有没有捕获异常,都会执行finally,因此finally中常用来关闭资源
 *        3. 可以有多个catch,分布捕获对应的异常,把范围小的异常写在类的前面,范围大的异常写在后面(否则有编译报错)
 * */
public class Excep {
    public static void main(String[] args) {
        //java 异常处理
        try {
            int a = 10;
            int b = 0;
            int c = a / b;
        } catch (RuntimeException e) {
            // catch 时,需要将范围小的写在前面
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            System.out.println("关闭资源");
        }
    }
}

 

上一篇:java实习生面试


下一篇:Java之RMI和JNDI