学习-Java异常处理之try-catch之异常捕获(1)

任务描述

本关任务:求给定两个数的商,并捕获除数为 0 的异常。

相关知识

为了完成本关任务,你需要掌握: 1.什么是异常; 2.如何捕获异常; 3.异常的使用原则。

什么是异常

异常:程序在运行过程中产生的不正常情况。

程序在运行的时候,发生了一些预期之外的事件,从而没有按照我们编写的代码执行,这就是异常。

异常是 Java 中的错误,但是并不是所有的错误都是异常,比如说,你在定义变量名的时候没有依照 Java 的规则,在语句的结尾少了一个分号,那么运行出来结果是错误: java.lang.Error

异常的原因有很多种,比如:

  1. 输入了错误的数据,比如:程序需要的是 int 类型数据,而用户输入了一串字符串;

  2. 对象没有初始化就调用,下面这段代码就会提示空指针异常。

 
  1. String str = null;
  2. int length = str.length();

要理解 Java 中的异常是如何工作的,你需要掌握以下三种类型的异常:

  1. 非运行时异常;

  2. 运行时异常;

  3. 错误。

非运行时异常

非运行时异常也称检查型异常,如下图 1 所示,当我们要打开一个文件时,这段代码就可能存在异常,因为这个文件很有可能并不存在,所以在 IDE(编程软件) 中就会有红波浪线报错。这种异常程序员是必须要处理的。

 
图1

运行时异常

运行时才有可能会出现的异常,该类型异常程序员可以不去处理,当异常出现时,虚拟机会处理。常见的运行时异常有空指针异常。

错误

错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

捕获异常

如图 1 所示,非运行时异常是需要我们提前处理的,那么如何处理呢?

Java 中提供了一个捕获异常的机制:try-catch,如下所示:

 
  1. try{
  2. 代码 A
  3. 代码 B
  4. }
  5. catch(Exception e){
  6. 异常处理代码
  7. }
  8. 代码 C

通过这两个单词的字面意思我们就能很好的理解了: try:尝试;catch:捕获。 尝试执行代码 A 和代码 B,如果这两段代码有一个出现了异常,就会执行 catch 中的语句,如果代码A、B 都不存在异常就不会执行 catch 代码,最后继续执行代码 C。其中 catch 后面括号中写的是异常的类型,Exception 可以代表所有异常,但是随着后面学习的深入,这里的异常类型最好写具体,比如 FileNotFoundException(文件未找到异常)。

所以之前报错的代码我们这样写就没错啦:

 
  1. public static void main(String[] args) {
  2. try {
  3. File file = new File("D://abc.c");
  4. FileInputStream fileInputStream = new FileInputStream(file);
  5. }
  6. catch (Exception e){
  7. System.out.println("文件D://abc.c不存在");
  8. }
  9. System.out.println("代码c部分");
  10. }

在以上代码中,我们使用 try-catch 语句捕获了异常,所以程序就不会报错了。

异常的使用原则

异常使用的原则主要有三个:

具体明确:指抛出的异常应能通过异常类名和 message 准确说明异常的类型和产生异常的原因; 提早抛出:指应尽可能早的发现并抛出异常,便于精确定位问题; 延迟捕获:指异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常。

 


import java.util.Scanner;

public class ExcTest {
    public static void main(String[] args) {
        // 请在Begin-End间编写代码
        /********** Begin **********/
        // 第一步:接收给定的整数
        Scanner input=new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int x;
        // 第二步:求给定两个数的商,并捕获除数为0的异常
        try{
            x = a / b;
        }
        catch(Exception e){
            {
                System.out.println("除数不能为0");
            }
        }
        if(b != 0){
            System.out.println(a / b);
        }
        /********** End **********/

    }
}

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼的三金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值