ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE 55 异常机制 → 捕获和抛出异常

2021-07-11 09:59:12  阅读:162  来源: 互联网

标签:55 捕获 System println JavaSE 异常 public out


9.2 捕获和抛出异常


  • 抛出异常
  • 捕获异常
  • 异常处理的五个关键字
  1. try //监视区域,先做监视观察 才能去捕获
  2. catch //捕获异常
  3. finally //无论怎么样 最终都要去做的事(善后工作
  4. throw //抛出异常(非常确定抛出的是什么异常,只是没有做异常的声明
  5. throws //在方法头上 书写(意味着该方法可能会抛出这些异常!这叫做异常的声明)

如果该方法在方法体内 完成了对其中一个异常的处理,那么这个被处理的异常!就可以不用写在 方法头上了!因为该异常不需要向外抛出,该方法自己已经解决了!

9.2.1 举例说明

在这里插入图片描述
正常 a/b 肯定会 提示你 异常。

那么 我们怎么 去捕获这个异常,并且获得一些 信息呢?

  1. 首先 要监视它的所有行为!用 try 来监视!
  2. 用 catch 去捕获 它 异常的地方!这个异常的地方我们可以自己定义时什么异常,比如说 ArithmeticException 算术异常。
    catch(ArithmeticException e) //意思就是 说 当 我监视你整体的行为中,如果出现了 算术异常,那么我就将这个异常捕获下来!
  3. finally:就是做善后工作,出不出现异常,都要执行!所以可有可无。
package Exception;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {//try 作为监视区域,把需要监视的东西放在这里
            System.out.println(a/b);
        }catch (ArithmeticException e) {
            System.out.println("出现异常!变量b不能为0,分母不能为0!");
        }finally {
            System.out.println("无论出不出现异常,我都得执行!");
        }

    }
}

9.2.2 当我们不知道 需要捕获什么异常的时候怎么办呢?

可以使用 Throwable 这个最大的 异常类型 进行捕获!

  1. 如果你知道你捕获的肯定是异常 也可以用 Exception
  2. 如果你知道你不活的肯定是错误 也可以用 Error
package Exception;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {//try 作为监视区域,把需要监视的东西放在这里
            System.out.println(a/b);
        }catch (ArithmeticException e) {
            System.out.println("出现异常!变量b不能为0,分母不能为0!");
        }finally {
            System.out.println("无论出不出现异常,我都得执行!");
        }

        try{
            new Test().a();
        }catch(Throwable e)
        {
            System.out.println("栈溢出");
        }
    }
    public void a()
    {
        b();
    }
    public void b(){
        a();
    }
}
  • 如何判断是 异常 还是 错误 ??

可以通过 层次 捕获(捕获优先级) ,多次 判断,来确定是 异常 还是 错误!

Throwable > Exception > Error (捕获优先级)

例如:捕获栈溢出 是 error 还是 exception

package Exception;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {//try 作为监视区域,把需要监视的东西放在这里
            System.out.println(a/b);
        }catch (ArithmeticException e) {
            System.out.println("出现异常!变量b不能为0,分母不能为0!");
        }finally {
            System.out.println("无论出不出现异常,我都得执行!");
        }

//层次捕获 从低到高,如果从高到低,那么直接就捕获结束了!
        try{
            new Test().a();
        }catch(Error e)
        {
            
            System.out.println("error");
        }catch(Exception e)
        {
            System.out.println("exception");
        }catch(Throwable e)
        {
            System.out.println("栈溢出");
        }
    }
    public void a()
    {
        b();
    }
    public void b(){
        a();
    }
}

在这里插入图片描述
事实证明,栈溢出 属于 error 错误 范畴,是 一个很严重的 错误!并非 异常 可比!

  • IDEA 自动包含代码快捷键

Ctrl+Alt+T 直接就会 让你选择 用什么结构 包含这行代码。
在这里插入图片描述


9.2.3 捕获到后的 e 对象

e 是捕获到后该异常后,给你提供的 该异常类型的对象,这个对象有很多的方法!是Java 为你提供的,只是为了方便 你 开发程序,所以 Java 为你提供了 这么一个东西!

在这里插入图片描述


9.2.4 主动抛出异常(throw/throws)

throw / throws 常常用于 方法中!而并非 随便挑选出来的某个代码块中。


9.2.4.1 throw

throw 只能抛出一个异常,并且不会自动做 异常的声明所谓异常的声明,所谓异常的声明就是用 throws 在 方法头部 那里 告诉外部 我这个方法可能会抛出哪些异常!

package Exception;

public class Throw {
    public static void main(String[] args) {
        new Throw().f(2,0);
    }

    public int f(int a,int b)
    {
        if( b == 0)
        {
            throw new ArithmeticException();//抛出一个 算术异常对象
        }

        int ret = 0;
        //int ret = a / b;
        return ret;
    }
}

在这里插入图片描述
一旦抛出了异常,你就会发现 我们需要 catch 抓捕下来 并且 进行处理!
在这里插入图片描述


9.2.4.2 throws

throws 作为 方法 可能抛出 异常的声明!
在这里插入图片描述
简单了解下就行,就是 为 可能抛出的异常 做声明!而 方法体内,要在 特定的情况下,抛出这些异常,以便于 我们进行 捕获 和 处理!

标签:55,捕获,System,println,JavaSE,异常,public,out
来源: https://blog.csdn.net/qq_52606908/article/details/118650122

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有