exception_exceptionhandler - CSDN
  • 1.异常的体系 (1)异常:所谓异常指的就是程序在 运行时 出现错误时通知调用者的一种机制. (2)基本语法 try{ 有可能出现异常的语句 ; }[catch (异常类型 异常对象) { } ......[finally { 异常的出口 ...

    1.异常的体系

    (1)异常:所谓异常指的就是程序在 运行时 出现错误时通知调用者的一种机制.
    (2)基本语法

    try{
    有可能出现异常的语句 ;
    }[catch (异常类型 异常对象) {
    } ... ]
    [finally {
    异常的出口
    }]
    

    a).try 代码块中放的是可能出现异常的代码.
    b).catch 代码块中放的是出现异常后的处理行为.
    c).finally 代码块中的代码用于处理善后工作, 会在最后执行.
    其中 catch 和 finally 都可以根据情况选择加或者不加
    d)如果加了finally,无论是否存在异常, finally 中的代码一定都会执行到.

    (3)异常体系
    在这里插入图片描述
    a) Error 指的是 Java 运行时内部错误和资源耗尽错误. 应用程序不抛出此类异常;
    b)Exception 是我们所使用的异常类的父类.其中 Exception 有一个子类称为 RuntimeException(运行时异常);
    c)Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为 非受查异常, 所有的其他异常称为受查异常;
    d)受查异常的处理式
    A:使用 try catch 包裹起来;
    B:在方法上加上异常说明, 相当于将处理动作交给上级调用者;

    2.处理异常的流程

    (1)程序先执行 try 中的代码.
    (2)如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.
    (3)如果找到匹配的异常类型, 就会执行 catch 中的代码.
    (4)如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.
    (5)无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).
    (6)如果上层调用者也没有处理的了异常, 就继续向上传递.
    (7)一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止

    3.异常当中的问题

    (1)throws 关键字, 把可能抛出的异常显式的标注在方法定义的位置. 从而提醒调用者要注意捕获这些异常.
    (2)finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return

    展开全文
  • 一、前言 前面我们说到有关于API的学习,但是软件程序在运行过程中并不是会非常完美的,比如当我们写某个模块,用户的输入不一定符合要求,程序可能不存在或者是文件格式不对等等。所以接下来我们将要学习java的...

    一、前言

    前面我们说到有关于API的学习,但是软件程序在运行过程中并不是会非常完美的,比如当我们写某个模块,用户的输入不一定符合要求,程序可能不存在或者是文件格式不对等等。所以接下来我们将要学习java的异常捕捉机制

    二、分析学习

    软件程序在运行时,经常会遇到各种各样的问题,我们将其称之为异常:Exception,也就是例外的意思。那么我们怎么样才能使编写的程序安全的退出而不至于程序崩溃呢?我们先来看看用if语句处理程序的原始方案。

    public class TestException0 {
        public static void main(String[] args) {
            //将d:/a.txt复制到e:/a.txt
            if("d:/a.txt"这个文件存在){
                if(e盘的空间大于a.txt文件长度){
                    if(文件复制一半IO流断掉){
                        停止copy,输出:IO流出问题!
                    }else{
                        copyFile("d:/a.txt","e:/a.txt");
                    }
                }else{
                    System.out.println("e盘空间不够存放a.txt!");
                }
            }else{
                System.out.println("a.txt不存在!");
            }
        }
    }
    
    原始的方式下存在的弊端
    1. 逻辑代码处理代码存放在一起。
    2. 程序员要考虑的例外情况很复杂

    逻辑代码与处理代码存放在一起,使得程序员本人找不到正确的执行代码;而且用原始if处理,就要求程序员本身对例外的错误情况十分了解,对程序员的要求十分高。

    那么我们怎么样去应对异常情况呢?JAVA的异常机制就给我们提供了一些方便的处理方式。假如我们使用JAVA的异常机制来处理的话可以类似如下:

    try {
        copyFile("d:/a.txt","e:/a.txt");
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    异常机制的本质

    上面所提到的异常,我们可以直接用try-catch将其包起来,JAVA的异常我们可以交给try异常块给包起来,当我们遇到程序异常时我们直接交给系统处理,直接catch一下。

    我们将JAVA异常机制的本质可以理解为当程序出现错误或异常时,程序能够安全退出的机制。

    三、处理方式

    异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。

    在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类
    1
    异常类定义中包含了该类异常的信息和对异常进行处理的方法。
    2
    所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
    我们开始看我们的第一个异常对象,并分析一下异常机制是如何工作的。

    异常分析(除数为0)
    public class TestException1 {
        public static void main(String[] args) {
            int i=1/0;  //除数为0
            System.out.println(i);//输出
        }
    }
    

    执行结果如下所示:
    3
    我们可以看到,系统提示0不能作除数,当程序跑到异常处时会生成一个”ArithmeticException“异常对象,然后抛给我们的JRE,再由JRE作处理将程序给停止掉,最后提示并打印相关的异常信息,让我们去想办法处理异常。

    Java是采用面向对象的方式来处理异常的。处理过程:
    1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
    2. 捕获异常 :JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

    四、异常分类

    JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。

    Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:ErrorException。Java异常类的层次结构如下所示。
    11


    对于Error来说,我们只有重启虚拟机了,这个无法处理的是不需要再去处理异常了。

    而对于Exception来讲,是我们本次需要学习的异常,在这之下还分为两大类:Checked ExceptionRuntimeExceptionUnchecked Exception),需要检查的异常和不需要检查的异常(运行时会抛出,一般为逻辑错误)

    此张图为异常的基本分类,比较重要,要牢记!下一篇我们来展开讲解异常的分类!

    未完待续~

    展开全文
  • Java之常见异常Exception

    万次阅读 2018-08-15 08:55:30
    异常是程序编译或运行时可能会发生的一些小的错误,如果发生会导致程序正常的运行。 编译期异常是可检查的,编译的时候提醒编程的人要处理,运行期异常是不可检查的  1.... /** * function: 1.2.1编译异常 author:...

    异常是程序编译或运行时可能会发生的一些小的错误,如果发生会导致程序正常的运行。

    编译期异常是可检查的,编译的时候提醒编程的人要处理,运行期异常是不可检查的

     1.编译异常

    /**
    * function: 1.2.1编译异常 author:wangpeng time:2018年8月13日下午7:45:17
    */
    @Test
    public void test() {
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	Date date = sdf.parse("2018-11-11 11:11:11");
    }


      2.运行时异常RuntimeException
                2.1NullpoiontException  空指针异常,list为null导致

    /**
    * function: 1.2.2运行时异常-NullpoiontException空指针异常 author:wangpeng
    * time:2018年8月13日下午7:45:44
    */
    @Test
    public void test1() {
    	List<String> list = null;
    	list.add("123");
    }


                2.2ArrayIndexOutOfBoundsException 数组下标越界异常

    /**
    * function: 1.2.2运行时异常 ArrayIndexOutOfBoundsException数组下标越界异常 author:wangpeng
    * time:2018年8月13日下午7:46:23
    */
    @Test
    public void test2() {
    	String[] str = { "123", "456" };
    	System.out.println(str[3]);//数组str下标最大为1
    }


                2.3ArithmeticException 除数为0时

    /**
    * function: 1.2.2运行时异常 ArithmeticException 除数为0时 author:wangpeng
    * time:2018年8月13日下午7:47:40
    */
    @Test
    public void test3() {
    	System.out.println(10 / 0);
    }

     

    展开全文
  • 异常(Exception

    千次阅读 2019-01-06 17:23:12
    异常

    异常

     java语言采用异常来处理系统级和应用程序级的错误状态,它是一种结构化的、统一的和类型安全的处理机制。
     在程序运行过程中,如果产生错误,则抛出异常;通过try语句来定义代码块,运行可能抛出异常的代码;通过catch语句,可以捕获特定的异常并执行相应的处理;通过finally语句,可以保证即使产生异常(处理失败),也可以在事后清理资源等。

    异常类

     在程序运行过程中,如果某个方法中出现了错误,则可以创建一个异常对象(exception object),并通过throw语句把创建的异常抛出给系统运行时,即程序终止正常执行流程,转而执行异常处理流程。

    • 异常对象是异常类的对象实例。
    • java异常类均继承于java.lang.Throwable。
    • java异常类层次结构:
      在这里插入图片描述
    异常 描述
    ArithmeticException 当出现异常的运算条件时,抛出此异常。(数学异常)例如,一个整数"除以零"时,抛出此类的一个实例。
    ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。(数组下标异常)如果索引为负或大于等于数组大小,则该索引为非法索引。
    IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
    IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
    NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常(空指针异常)
    NumberFormatException 数据类型异常
    1. 错误异常类
       Error类及其子类通常用于程序无法处理的错误,例如StackOverflowError等。
    • 错误异常一般由java虚拟机抛出,并有java虚拟机捕获。
    • 这些异常发生时,java虚拟机一般会选择在控制台打印相应的错误信息,并终止运行。
    1. 运行时异常类
       RuntimeException类及其子类,称为运行时异常。
    • 运行时异常类一般由程序逻辑错误引起。
    • 在程序代码中可以选择捕获处理这些异常,也可以不捕获处理。
    1. 编译时异常类
       Exception类及其子类(除RuntimeException类及其子类),称为非运行时异常类。
    • 非运行时异常类是必须进行处理的异常,如果不处理,程序将不能编译通过。
    • 非运行时异常类一般是java类库包含特定应用的异常,例如java.io.IOException、SQLException等,以及用户自定义的继承于Exception异常。

    抛出异常

    1. Java虚拟机抛出异常
      举例:
    		int a = 10;
            int b = 10/0;
            System.out.println(b);
    

    output: 数学异常,除数不能为0
    在这里插入图片描述

    1. 程序代码抛出异常
      举例:
    //手动抛出异常,可以给异常带有参数
            String str = null;
            if(str == null) {
                throw new NullPointerException("str==null");
            }
    

    在这里插入图片描述

    捕获异常

     当程序中某个方法抛出异常后,Java虚拟机通过调用堆栈查找相应地异常捕获程序。如果找到匹配的异常捕获程序(即调用堆栈中的某方法使用try…catch语句捕获处理),则执行相应的处理程序,即执行catch语句块。如果虚拟机中没有相应匹配的异常捕获程序,则java虚拟机捕获处理异常。
    举例:

    1. 使用 try 和 catch 关键字可以捕获异常。
       try/catch 代码块放在异常可能发生的地方。try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:
      try
      {
      // 程序代码
      }catch(ExceptionName e)
      {
      //Catch 块
      }
      举例:
        public static void main(String[] args) {
            try {
                int[] array = {1,2,3,4};
                System.out.println(array[5]);
            }catch (ArrayIndexOutOfBoundsException e){
                System.out.println("数组越界");
                e.printStackTrace();
            }
        }
    
    

    output:
    在这里插入图片描述
    3. 多重捕获块
    一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

    public static int division (int num1, int num2 ){
            return num1 / num2 ;
        }
        public static void Calculator() 
        //这里已经处理了异常,不需要再声明异常了
        //如果加了声明,当前函数就不处理了,调用该函数的一方进行处理。
        {
            Scanner scan = new Scanner ( System. in );
            try {
                int num1 = scan .nextInt () ;
                int num2 = scan .nextInt () ;
                int result = division (num1 , num2 ) ;
                System.out.println( "result:" + result) ;
            } catch (ArithmeticException e) {
                System.out.println("ArithmeticException 异常");
                e.printStackTrace();
            } catch (InputMismatchException e) {//输入有误的时候
                System.out.println("InputMismatchException 异常");
                e.printStackTrace();
            } finally {
                scan.close ();//资源的释放,关闭相应的流
            }
        }
        public static void main(String[] args)  {
            Calculator();
        }
    

    output:

    1. 输入10,2 测试:

    2. 输入字符测试:
      在这里插入图片描述

    3. 输入10,0测试:
      在这里插入图片描述
      举例:

    //try catch块与输出流结合
     public static void main(String[] args) throws IOException {//输出流,写入
            FileOutputStream file1 = null;//创建一个FileOutputStream类的对象
            File file = new File("G:\\1.txt");//创建一个File类对象,表明要写入的文件位置。
             // 输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖
            file1 = new FileOutputStream(file);//
            try {
                file1.write(new String("I love programming").getBytes());//写入的操作
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (file1 != null){
                    try {
                        file1.close();//关闭输出流
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
            }
        }
    

    声明异常和自定义异常

    • java中通过throws声明某个方法抛出的各种异常,可以同时声明多个异常,用逗号隔开。声明异常只是表明有可能会有异常抛出。
    public static void Select()throws NullPointerException{
            throw new NullPointerException("这是一个空指针异常。");
        }
        public static void main(String[] args) {//6
            Exception c = new Exception();
            try {
                c.Select();
            }catch (java.lang.Exception e){
                e.printStackTrace();
            }
        }
    

    在这里插入图片描述

    • 何时需要自定义异常?

    当JDK中的异常类型不能满足程序的需要时,可以自定义异常。(一般自定的时候都是需要异常帮程序做一些事情的时候)

    • 自定义异常类一般包括两个构造方法:一个是默认构造方法;另一个是带String参数的构造方法(详细描述信息,超类Throwable的toString() 方法将打印此信息,可以方便程序调试)。
    • 自定义异常类的命名规则一般以Exception为后缀。

    1、定义一个异常
    2、编写构造方法继承父类的实现
    3、实例化自定义异常类型
    4、使用throw抛出

    class MyException extends Exception{
        public MyException(String lili){//自定义异常类,继承Exception类
            super();//默认构造函数
        }
    }
    public class Exception extends Throwable {
    
        public static void fun1() throws MyException{
            System.out.println("throw MyException");
            throw new MyException("lili");//可以给参数
        }
        public static void main(String[] args) {
            try {
                Exception.fun1();
            }catch (MyException e) {
                System.out.println("MyException caugth it");
                e.printStackTrace();
            }
        }
    }
    

    在这里插入图片描述

    展开全文
  • C++/C++11中std::exception的使用

    万次阅读 2020-06-29 10:44:09
    C++/C++11中std::exception的使用
  • JAVA异常信息Exception e及e的相关方法

    万次阅读 2018-05-08 16:44:22
    例子:public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println(1 / 0); } catch (...
  • Exception和Error的区别

    万次阅读 2018-05-11 10:30:10
    世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确的处理好意外情况,才能保证程序的可靠性。 java语言在设计之初就提供了相对...
  • Java的异常Exception----(最简单明了的总结)

    万次阅读 多人点赞 2017-11-01 22:45:04
    1、什么是异常?  程序开发和运行过程中会出现编译...异常( Exception ):正常程序流程所不能处理或者没有处理的异常情况或异常事件。 2、为什么要使用异常?  传统的程序设计中会像下面的伪代码形式来处理错误:
  • java异常分类和处理

    万次阅读 2018-03-08 14:57:37
    -------------------------------------java异常分类和处理--------------------------------异常 异常都是以Exception结尾的。 在我们写程序的时候难免会出现错误,java中的异常机制为了提高我们程序的健壮性和...
  • spring boot启动时报UnsatisfiedDependencyException异常

    万次阅读 热门讨论 2018-03-01 13:06:32
    今天在工作中遇到了一个非常痛苦的时,spring boot启动时报UnsatisfiedDependencyException异常,于是就回过头来检查一下注解,发现并没有什么问题,又与之前的代码进行了详细的对比,还是没有发现任何问题,包括...
  • Java反射异常处理之InvocationTargetException

    万次阅读 多人点赞 2014-09-27 14:27:46
    InvocationTargetException异常由Method.invoke(obj, args...)方法抛出
  • InvocationTargetException原因分析

    万次阅读 热门讨论 2008-04-28 10:23:00
    异常全称:java.lang.reflect.InvocationTargetException本来代码在线上运行得很正常,那天同事从线上copy了一份下来在本地运行,不知道为什么一进入那个页面就报这个错,实在找不出原因,后来交给我。 凭经验跟直觉...
  • Exception in thread "main" java.lang.NullPointerException at oj1255.Main.input(Main.java:41) at oj1255.Main.(Main.java:24) at oj1255.Main.main(Main.java:52) 然后我调试才发现,这个对象数组居然...
  • EOFException的处理

    万次阅读 2018-12-19 14:43:49
    所以数据能接连不断的传过来,其实有很多人在运行的时候都会碰到EOFException, 然后百思不得其解,去各种论坛问解决方案。其实我想说,这个异常不是必须声明的,也就是说它虽然是异常,但其实是正常运行结束的标志。...
  • 严重: Exception sending context initialized event to listener instance of class org.springfram 意思就是说初始化事件的时候出现了异常 第一步: 1、先检查是否导入了项目所需要的全部Jar包,一般情况下是因为...
  • java中error和exception的区别

    万次阅读 多人点赞 2012-09-18 10:16:22
    Error类和Exception类的父类都是throwable类,他们的区别是: Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法...
  • 使用Exception可以保证捕获异常后能继续维持JVM的运行 如果Exception换成IOException后,一旦出现IO异常,便会捕获停止运行. “IoException“(流异常,通常用在文件读取中)是”Exception”(用在所有的异常处理中...
  • 心态崩了,电脑又蓝屏了,同样蹦出来UNEXPECTED_STORE_EXCEPTION,like this: 而且我的是卡在完成 0%永远不会动的那种,重启之后就是找不到硬盘,无法从硬盘启动。 在网上搜了一些方法,问题的原因好像是这个...
  • 打开ExceptionException的分类先来看看下面这张图: 从图中可以看出: 1. Error(错误)和Exception(异常)都继承自Throwable类,我们重点关注Exception; 2. 异常类分为检查异常(直接继承自Exception,除
  • checked exception和unchecked exception区别

    千次阅读 2011-02-24 10:35:00
    Java 中定义了两类异常: 1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。...
1 2 3 4 5 ... 20
收藏数 1,970,022
精华内容 788,008
关键字:

exception