一、何为异常?


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块将被忽略。
  • 异常子类一定要位于异常父类之前,如下图:



-------------------------------------------------------------------------------------------------------------------------------------------------

突如其来的"中断异常",我(Java)该如何处理?的更多相关文章

  1. 突如其来的“中断异常”,我(Java)该如何处理?

    3.try-catch块 try语句块中代码执行时发生三种情况: try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行. import java.util.*; pub ...

  2. Java 中断异常的正确处理方式

    处理InterruptedException 这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep().然后编译器或 IDE 就会抱怨说 Inte ...

  3. “全栈2019”Java异常第二章:如何处理异常?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. Java中断异常 InterruptedException 的正确处理方式

    你看到这篇文件可能是因为你已经调用了一个抛出 InterruptedException 异常的方法,并且需要以某种方式处理它. 首先,需要了解为一个方法为啥会 throws InterruptedEx ...

  5. Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换

    Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...

  6. Java是如何处理别名(aliasing)的

    什么是Java别名(aliasing) 别名意味着有多个别名指向同一个位置,且这些别名有不同的类型. 在下面的代码例子中,a和b是两个不同的名字,有不同的类型A和B,B继承A B[] b = new ...

  7. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  8. Debian部署RMI异常:java.rmi.ConnectException: Connection refused to host: 127.0.1.1;

    现象:在windows上部署RMI很顺利,但移到debian上部署后,客户端报异常: java.rmi.ConnectException: Connection refused to host: 12 ...

  9. 用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException

    用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: c ...

随机推荐

  1. 为什么使用Binder而不是其他IPC机制

    本文搬运自:Advantages of using Binder for IPC in Android 使用Binder而不是其他(Semaphores , Message Queue, PIPES) ...

  2. VBA批量查找和复制文件

    Function findAndCopy(srcFile As String, destFile As String, cmdFile As String) Dim WSH As Object, wE ...

  3. 用FlexGrid做开发,轻松处理百万级表格数据

    表格数据处理是我们项目开发中经常会遇到的设计需求之一,所需处理的数据量也较大,通常是万级.甚至百万级.此时,完全依赖平台自带的表格工具,往往无法加载如此大的数据量,或者加载得很慢影响程序执行. 那么, ...

  4. 提供程序不支持 DatabaseExists

    如果Oracle CodeFirst模式下要用EFProviderWrapperToolkit,那么会报告以下错误: 提供程序不支持 DatabaseExists. 这个错误是因为Oracle Cod ...

  5. jquery中bind()绑定多个事件

    bind()绑定事件 $(selector).bind(event,data,function): 参数event为事件名称(如"click,mouseover....."),da ...

  6. 构建基于Chromium的应用程序

    chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...

  7. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找 ...

  8. Eos开发——ajax请求

    function saveData(){ form.validate(); if(form.isValid()==false) return; var persons = grid.getChange ...

  9. 如何在多线程leader-follower模式下正确的使用boost::asio。

    #include <assert.h> #include <signal.h> #include <unistd.h> #include <iostream& ...

  10. MongoDB 安装和可视化工具

    MongoDB 是一款非常热门的NoSQL,面向文档的数据库管理系统,官方下载地址是:MongoDB,博主选择的是 Enterprise Server (MongoDB 3.2.9)版本,安装在Win ...