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)的用法

    千次阅读 2018-09-13 19:28:26
    package com.base.exception; public class Car { String name; public Car() { // TODO Auto-generated constructor stub this.name = ""; } public Car(String name) { // TODO Auto-...
  • 自定义异常 extends Exception

    千次阅读 2018-07-31 10:29:33
    从大体来分异常为两块: 1、error---错误 : 是指程序无法处理的...2、Exception --- 异常 :异常可分为运行时异常跟编译异常  1)运行时异常:即RuntimeException及其之类的异常。这类异常在代码编写的时候不会...
  • 常见的异常类Exception

    千次阅读 2018-11-30 11:38:15
    Java中常见的异常类型   先详细说明几个常见的异常   1. java.lang.nullpointerexception ... 这个异常大家肯定都经常遇到,异常的解释是"...,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个...
  • Java的异常Exception----(最简单明了的总结)

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

    万次阅读 多人点赞 2020-06-15 18:16:54
    《Java:详解Java中的异常(Error与Exception)》 《Java:简述Java中的自定义异常》 《Java:简述throw-throws异常抛出》 《Java:简述try-catch-finally异常捕获》 《Java:简述try-catch-finally中return返回》...
  • 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 (...
  • 异常: Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]:... Factory method 'dataSource' threw exception; nested exceptio
  • During handling of the above exception, another exception occurred 这是由于频繁访问网站或请求造成的,可以通过更换国内源的方法来解决此问题。示例如下: pip install scrapy -i ...
  • 在Eclipse中写代码,对于初学者来说极易忘记异常的处理,在编辑环境中会被提示“Unhandled exception type……”” ,如图:其实解决起来也很简单,只需把有这种异常的语句放在 try...catch... 语句中就行了,如图...
  • Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/boot/actuate/health/OrderedHealthAggregator pom.xml缺少jar或者存在同名jar 2.@EnableFeignClients是 ...
  • springBoot 项目使用redis缓存...org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authController': Unsatisfied dependency expressed through field 'authSer...
  • Java中出现Unhandled exception的原因

    万次阅读 2018-08-07 11:14:44
    说明某个方法在方法声明上已经声明了会抛异常,那么在调用这个方法的时候,就必须做异常处理,处理的方式有2种,要么try-catch这个异常,要么继续往上一层抛出这个异常,这是java语法要求的,必须这么做...
  • 一。本人将公司基于SSH(Spring,...查看日志文件,发现后台抛出了如下异常:nested exceptionis org.hibernate.exception.GenericJDBCException: Cannot open connection。翻译过来大意是说,在使用Hibernate通过JDB
  • ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Fielddata is disabled on text fields by default. Set fielddata=true on [categoryName] in order to load fielddata...
  • 同时访问方法,出现错误 解决办法:用同步锁synchronized把方法锁上
1 2 3 4 5 ... 20
收藏数 2,002,384
精华内容 800,953
关键字:

exception