当前位置:   article > 正文

JAVA中异常处理的学习笔记(浅谈异常处理)_如果try语句块在执行过程中发生异常,而抛出的异常在catch语句块中没有被声明

如果try语句块在执行过程中发生异常,而抛出的异常在catch语句块中没有被声明

异常的概述

1.异常是指在程序的运行过程所发生的不正常事件,如所需文件找不到、网络连接不通或连接中断、算术运算出错(如被零除)、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。
2.异常会中断正在运行的程序。

JAVA异常体系结构

所有异常类型都是Throwable类的子类,它派生了两个子类:Error类和Exception类。
Error类:表示仅靠程序本身无法恢复的验证错误,如内存溢出、动态链接失败、虚拟机错误。
Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络连接不通或连接中断、算术运算出错(如被零除)、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。
Exception类又可分为两大类异常:
(1)运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们进行处理。
(2)Checked异常(非运行时异常):除了运行时异常外的其他从Exception类继承来的异常类。

下图为java中一些常见的异常:
**JAVA中一些常见的异常类**

JAVA异常处理

程序有异常了就得处理一下,异常处理就像人们对平时可能遇到的意外情况,预先想好了一些处理的办法。在程序执行代码是,若发生了异常,程序会按照预定的处理办法对异常进行处理,异常处理完毕之后,程序继续执行。
而java中的异常处理是通过5个关键字来实现的,即try、catch、finally、throw和throws。
在这里插入图片描述
5个关键字的作用(这里只是个人的理解,详细请看上图):
try:到对异常的监视作用。
catch:起到对异常的捕获作用。
finally:无论是否发生异常,代码总能执行。
throws:声明异常。
throw:抛出异常。
注意事项:
(1)throw可以写在try、catch、finally当中之中以及代码块之外(可以写在方法内的任何一个位置)
(2)除了在try中不用在方法参数列表后面写throws之外,其他地方全要写throws。
(3)try-catch语句块:
如果try语句块中所有语句正常执行完毕,没有异常发生,那么catch语句块中的代码将正常执行。
如果try语句块在执行过程中发生异常,并且这个异常与catch语句块中声明的异常类型匹配,那么try语句块中剩下的代码都将被忽略,而相应的catch语句块将会被执行。
如果try语句块在执行过程中发生异常,而抛出的异常在catch语句块中没有被声明,那么方法立即退出。
使用try-catch处理异常,如下代码块:

 try {
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(num1+"/"+ num2 +"="+ num1/ num2);          
        } catch (Exception e) {
            System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
            e.printStackTrace();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(4)try-catch-finally语句块:
如果try语句块中所有语句正常执行完步,finally语句块也会被执行。
如果try语句块在执行过程中发生异常,无论这种异常能否被catch语句块捕获到,都将执行finally语句块中的代码。
特别注意:即使在catch语句块中存在return语句,finally语句块中的语句也会执行。
finally语句块中语句不执行的唯一情况实在异常处理代码中执行了System.exit(1)退出Java虚拟机
使用try-catch-finally处理异常,如下代码块:

 try {
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
        } catch (Exception e) {
            System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
            //System.exit(1); // finally语句块不执行的唯一情况
        } finally {
            System.out.println("感谢使用本程序!");
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

存在return语句,finally语句块中的语句也会执行,如下代码块:

try {
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
            return; //finally语句块仍旧会执行
        } catch (Exception e) {
            System.err.println("出现错误:被除数和除数必须是整数,除数不能为零");               
            return; //finally语句块仍旧会执行
        } finally {
            System.out.println("感谢使用本程序!");
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(5)通过throws声明异常,使用throw处理异常
a.throw用于程序员自行产生并抛出异常,throws用于声明该方法内抛出了异常
b.throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
c.throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个(在使用try-catch语句处理异常时,应该根据throws声明的异常个数来进行相应的处理,从而做到对异常具体准确的处理,当然,如果声明了一个Exception异常类,那么在处理异常时可以写具体的异常处理也可以直接用Exception类处理,因为Exception异常是所有异常的父类。)
使用throws声明异常,如下代码:

public static void divide() throws Exception {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = in.nextInt();
        System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用throw抛出异常,如下代码:

public void setSex(String sex) throws Exception {
  if ("男".equals(sex) || "女".equals(sex))
   this.sex = sex;
  else {
   throw new Exception("性别必须是“男”或者“女”!");
  }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/166990
推荐阅读
相关标签
  

闽ICP备14008679号