突如其来的"中断异常",我(Java)该如何处理?

一、何为异常?

1.生活中的实例

生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 。。。。。。。

2.程序中的实例

我们的代码中也许存在许多纰漏,导致用户使用时程序突然停止工作,例如下面简单的Java代码完成一个加法器:

import java.util.Scanner;

public class Count {
    public static void main (String []args){
     int a , b;
     Scanner read = new Scanner(System.in);

     System.out.print("请输入a:");
     a = read.nextInt();

     System.out.print("请输入b:");
     b = read.nextInt();

     System.out.println("a+b="+(a+b));
   }
}

看看输入数据会不会出现异常:

  • 当输入100和200时,运行正常:
  • 当输入100和a时,运行报错:

这就是Java中的异常,输入不合法,程序无法继续运行被迫终止,流程图如下:

3.异常的概念

异常:异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。在Java等面向对象的编程语言中异常属于对象(Java语言中异常分为运行时异常(Exception)和编译型异常(Error))

二、Java中异常处理机制

1.Java异常处理机制的概念

Java异常处理机制就是程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后程序会继续运行下去。

2.关键字trythrowthrowscatchfinally

try: 尝试执行被此关键字作用的代码块A,若出现异常则忽略代码块A中剩下的代码。 throws: 声明方法中将抛出的异常,通常在方法名后出现。 throw: 手动抛出异常。 catch: 捕获处理异常。 finally:不论出现不出现异常都要此块代码都要执行。

3.try-catch

try语句块中代码执行时发生三种情况:

  • try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行。
import java.util.*;
public class Count {
        public static void main (String []args){
            int a , b;
            Scanner read = new Scanner(System.in);
            try{
                System.out.print("请输入a:");
                a = read.nextInt();
                System.out.print("请输入b:");
                b = read.nextInt();
                System.out.println("a+b="+(a+b));
            }catch(InputMismatchException ex){
                System.out.println("不可以,请输数字!");
                }
                System.out.println("<<<<欢迎使用!>>>>");
        }
}

输入100和200后程序顺利进行!

  • try语句块中代码执行过程中产生异常,并且该异常跟catch中声明的异常类型相符合,那么try语句块中剩余的代码将被忽略,catch语句块的代码将被执行。 还是上面代码,输入100和a后程序运行如下:
  • try语句块中代码执行过程中产生异常,但是抛出的异常并没有在catch语句块中声明,那么这个时候程序会立刻终止。

4.try-catch-finally

catch子句后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行。

  • 代码示例:
import java.util.*;

public class Count {
     public static void main (String []args){
        int a , b;
        Scanner read = new Scanner(System.in);
        try{
            System.out.print("请输入a:");
            a = read.nextInt();
            System.out.print("请输入b:");
            b = read.nextInt();
            System.out.println("a+b="+(a+b));
        }catch(Exception ex){
            System.out.println("不可以,请输数字!");

        }finally{
        System.out.println("<<<<欢迎使用!>>>>");
        }
     }
}
  • 运行结果:

5.多重catch

  • 一段代码可能会产生多个异常。
  • 依次对每个catch块声明的异常对象进行检查,找到执行第一个与try抛出的异常类型匹配的catch块,之后的catch块将被忽略。
  • 异常子类一定要位于异常父类之前,如下图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LinkedBear的个人空间

唠唠SE的集合-04——ArrayList 原

        ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。

1036
来自专栏闻道于事

JavaScript深入浅出补充——(一)数据类型,表达式和运算符

项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一、数据类型 JavaScript中有五种原始类型和一种对象类型 ? JavaSc...

3185
来自专栏青枫的专栏

java基础学习_基础语法(下)01_day05总结

============================================================================= ==...

671
来自专栏程序员互动联盟

【编程基础】C++比C牛逼的七个点

1. 函数检测增强 ? 在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量。 C语言中多个同名的全局变量最终会被链接到全局...

3135
来自专栏海天一树

小朋友学Python(10):C/C++/Java/Python的关键字

一、C语言关键字 C语言关键字有32个 autobreakcasecharconstcontinuedefaultdodoubleelseenumexternf...

2538
来自专栏java技术学习之道

Java进阶--深入理解ArrayList实现原理

963
来自专栏GreenLeaves

JavaScript之面向对象学习五(JS原生引用类型Array、Object、String等等)的原型对象介绍

1、原型模式的重要性不仅仅体现在创建自定义类型方面,就连所有的原生的引用类型(Obejct、Array、String等等)都在构造函数的原型上定义方法和属性。如...

19410
来自专栏老马说编程

计算机程序的思维逻辑 (11) - 初识函数

查看上节内容,请点击上方链接关注公众号,查看所有文章。 函数 前面几节我们介绍了数据的基本类型、基本操作和流程控制,使用这些已经可以写不少程序了。 但是如果需...

1787
来自专栏ppjun专栏

排序算法

702
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

651

扫码关注云+社区