zoukankan      html  css  js  c++  java
  • Java 异常处理 try catch finally throws throw 的使用和解读(一)

    最近的一个内部表决系统开发过程中,
    发现对异常处理还存在一些模棱两可的地方,
    所以想着整理一下
    主要涉及到:
    1.try catch finally throws throw 的使用和解读
    2.自定义异常的使用
    3.常见的运行异常

    /**
    * Java 异常处理
    * try catch finally throws throw
    * @author Ma San
    *
    */
    public class ExceptionTest {


    // 函数可能发生异常时 两种处理办法
    // 1.try catch 捕获并处理异常
    // 2.throws 声明异常
    /**
    * try catch 捕获并处理异常
    */
    public void function1(int index){
    try {
    // 以下代码抛出异常,并且被捕获
    if(--index<0) throw new Exception("index out of 0");
    } catch (Exception e) {
    // catch 内处理异常
    // TODO: handle exception
    }
    }

    /**
    * throws 声明异常
    * @throws Exception
    */
    public void function2(int index) throws Exception{
    // 以下代码抛出异常
    if(--index<0) throw new Exception("index out of 0");
    }

    // 比较 try catch 和 throws 的区别
    // 前者会捕获异常并处理,后者只是声明会发生的异常,并不能捕获也不能处理
    // throws声明异常,如果被抛出,最终也会被try catch 捕捉处理
    // 如果程序中没有try catch 那么 该线程被终止,如果是主线程则程序会被终止

    // try catch finally throws throw 语法规则和比较

    // 1.try catch :捕获异常
    // 2.finally : 任何情况下都会执行的代码
    // 3.throws: 声明可能会发生的异常
    // 4.throw: 抛出异常

    //语法规则:
    //(1):try代码块不能单独存在,后边至少有一个catch或者finally代码块
    // 以下代码会发生编译错误
    public static void main(String args[]) throws Exception{
    try{
    //代码
    }
    }
    //(2):try代码快后边可以没有catch也可以有多个catch,可以没有finally也可以有一个finally
    // 其中,如果catch 和 finally要共存,则finally 必须出现在catch的后面

    // (3): try 代码块和catch、finally代码块是不同的作用域
    // 在try代码块声明的变量 catch 和 finally不能访问
    try
    {
    // 在try代码块中声明变量
    int num = 0;

    }
    catch (Exception e)
    {
    num++; // 不合法,编译错误
    }finally{
    num = 9; // 不合法,编译错误
    }

    // 定义在try代码块外
    int num = 0;
    try
    {

    }
    catch (Exception e)
    {
    num++; // 合法
    }finally{
    num = 9; // 合法
    }

    (4): try 后面包含多个catch的时候,JVM会一次和各个catch代码块声明的异常类型匹配
    如果异常对象为某个异常类型或者其子类实例就执行这个catch代码块,不再执行其他的。
    例:
    try
    {
    code;//假设可能抛出FileNotFoundException
    }
    catch (SQLException)
    {
    System.out.println("SQLException");
    }
    catch (IOException)
    {
    System.out.println("IOException");
    }
    catch (Exception)
    {
    System.out.println("Exception");
    }
    发生异常控制台会输出 “Exception”;

    (5)throw 语句后面不允许紧跟其他语句,因为这些语句永远不会被执行

    }

  • 相关阅读:
    前端异常上报
    前端异常解析:Source Map
    前端操作剪切板不完全指北
    多系统之间模块相互引用的引发的深思
    浅谈vue原理(四)
    浅谈vue原理(三)
    浅谈vue原理(二)
    浅谈vue原理(一)
    vue中路由嵌套的作用
    常用的学习网站和小工具
  • 原文地址:https://www.cnblogs.com/maxm/p/6632264.html
Copyright © 2011-2022 走看看