JAVA 基础 异常处理

本文围绕Java基础异常处理展开,介绍了异常的分类,包括Error、Exception及其子类RuntimeException和非运行时异常。详细讲解了try、catch、finally、throw、throws 5个关键字的作用,还说明了try、catch和finally使用的注意点,并给出了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA 基础异常处理## 标题
5个关键字 try、catch、finally、throw、throws
Java的异常捕获机制是怎么处理异常的?
要出捕获,要么抛出

一、异常
异常是程序运行过程中出现的错误。
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的父类。

异常主要分类两类,一类是 Error,另一类是 Exception
Exception有两个子类,一个是RuntimeException,另一种是 非运行时异常,比如IOException。
Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。

运行时异常 RuntimeException
运行时异常都是RuntimeException类及其子类。叫运行时异常嘛,运行时发生的异常RuntimeException是我们程序开发中需要重点处理的异常。
如NullPointerException、 IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常/检查性异常/检查异常/编译异常(非运行时异常,叫法有点多)

一个异常,如果不是运行异常,那么他就是 非运行时异常。
比如如IOException、SQLException等以及用户自定义的Exception异常。这些异常在编译时就会报错,我们必须处理,想不处理都不行。

二、5个关键字 分别是:try、catch、finally、throw、throws。

1、try
try语句块,表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象。

2、catch
catch语句块会捕获try代码块中发生的异常并在其代码块中做异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。
当 try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配,若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。
catch语句可以有多个,用来匹配多个中的一个异常,一旦匹配上后,就不再尝试匹配别的catch块了。
通过异常对象可以获取异常发生时完整的 JVM堆栈信息,以及异常信息和异常发生的原因等。

3、finally
finally语句块是紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行,而不管是否try语句块是否发生异常。

throws
throws表示什么?
当一个方法参数列表之后throws Exception,用来声明方法可能会抛出某些异常,那么调用该方法的地方就必须try……catch捕获异常,否则编译不通过。
throws什么时候用呢
如果一个方法中某些代码有可能造成某种异常,但是并不确定怎么处置,那么这个方法应该声明抛出异常,表示该方法不对这些异常进行处理,有调用者进行着。如果调用者也无法处理这些异常,那么应该继续抛出throws,如果一层层往上throws,那么这个异常会最终达到main方法,到了main就终止了,JVM肯定会让你处理,这样编译就可以通过了。
(如果你异常一致背向上抛到了main方法,你main方法从语法上其实也可以也throws Exception,da你是这么做就没意义了)
当方法的调用者无力处理该异常的时候,应该继续抛出,而不是随随便便在catch块中打印一下堆栈信息做个勉强处理。当然,有能力处理的应该及时处理。
throw
throw关键字是用于方法体内部(语句抛出),用来抛出一个Throwable类型的异常。

三、try,catch和finally的使用注意点

1、try、catch、finally三个语句块均不能单独使用
三者可以组成
try…catch…finally、
try…catch、
try…finally三种结构。
catch语句可以有一个或多个,finally语句最多一个。
2、try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
3、多个catch块时候,只会匹配其中一个异常类并执行catch块代码,而不会再执行别的catch块,并且匹配catch语句的顺序是由上到下。

实例如下:
1、使用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();
        }

2、使用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("感谢使用本程序!");
        }

3、存在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("感谢使用本程序!");
        }

4、使用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);
    }

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

public void setSex(String sex) throws Exception {
  if ("男".equals(sex) || "女".equals(sex))
   this.sex = sex;
  else {
   throw new Exception("性别必须是“男”或者“女”!");
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值