精华内容
下载资源
问答
  • Java异常类型及处理

    万次阅读 多人点赞 2018-09-21 10:54:18
    本文基于此详细捋一下异常类型,实现以及使用时应怎么注意。 一、异常实现及分类 1.先看下异常类的结构图 上图可以简单展示一下异常类实现结构图,当然上图不是所有的异常,用户自己也可以自定义异常实现。上图...

    前言:

    Java异常,大家都很熟悉。但是对于具体怎么分类的,JVM对其怎么处理的,代码中怎么处理的,应该怎么使用,底层怎么实现的等等,可能就会有些不是那么清晰。本文基于此详细捋一下异常类型,实现以及使用时应怎么注意。

    一、异常实现及分类

    1.先看下异常类的结构图

    上图可以简单展示一下异常类实现结构图,当然上图不是所有的异常,用户自己也可以自定义异常实现。上图已经足够帮我们解释和理解异常实现了:

    1.所有的异常都是从Throwable继承而来的,是所有异常的共同祖先。

    2.Throwable有两个子类,Error和Exception。其中Error是错误,对于所有的编译时期的错误以及系统错误都是通过Error抛出的。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。

    3.Exception,是另外一个非常重要的异常子类。它规定的异常是程序本身可以处理的异常。异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。 

    4.Checked Exception

    可检查的异常,这是编码时非常常用的,所有checked exception都是需要在代码中处理的。它们的发生是可以预测的,正常的一种情况,可以合理的处理。比如IOException,或者一些自定义的异常。除了RuntimeException及其子类以外,都是checked exception。

    5.Unchecked Exception

    RuntimeException及其子类都是unchecked exception。比如NPE空指针异常,除数为0的算数异常ArithmeticException等等,这种异常是运行时发生,无法预先捕捉处理的。Error也是unchecked exception,也是无法预先处理的。

    二、异常的处理 

    代码中的异常处理其实是对可检查异常的处理。

    1. 通过try...catch语句块来处理:

    e.g.

    try
    {
       // 程序代码
    }catch(ExceptionName e1)
    {
       //Catch 块
    }
    

    Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

    如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

    2. 另外,也可以在具体位置不处理,直接抛出,通过throws/throw到上层再进行处理,具体的,如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

    下面方法的声明抛出一个 RemoteException 异常:

    import java.io.*;
    public class className
    {
      public void deposit(double amount) throws RemoteException
      {
        // Method implementation
        throw new RemoteException();
      }
      //Remainder of class definition
    }

    3. finally关键字

    finally 关键字用来创建在 try 代码块后面执行的代码块。

    无论是否发生异常,finally 代码块中的代码总会被执行。

    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

    finally 代码块出现在 catch 代码块最后,语法如下:

    try{
      // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }finally{
      // 程序代码
    }

     

    小结:

    本文对于异常的结构关系,分类,处理系统的简单整理了一下,能帮助我在理论上串起来,希望也能帮助有需要的朋友。

    展开全文
  • python自定义异常类型和raise抛出异常

    万次阅读 2018-08-18 10:41:44
    实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。 1.自定义异常类型 #1.用户自定义...

           实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

    1.自定义异常类型 

    #1.用户自定义异常类型,只要该类继承了Exception类即可,至于类的主题内容用户自定义,可参考官方异常类
    class TooLongExceptin(Exception):
        "this is user's Exception for check the length of name "
        def __init__(self,leng):
            self.leng = leng
        def __str__(self):
            print("姓名长度是"+str(self.leng)+",超过长度了")

    2.如何手动抛出异常:raise

    系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。
    raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
    大多数的异常的名字都以"Error"结尾,所以实际命名时尽量跟标准的异常命名一样。

    #1.用户自定义异常类型
    class TooLongExceptin(Exception):
        "this is user's Exception for check the length of name "
        def __init__(self,leng):
            self.leng = leng
        def __str__(self):
            print("姓名长度是"+str(self.leng)+",超过长度了")
    
    #2.手动抛出用户自定义类型异常
    def name_Test():
            name = input("enter your naem:")
            if len(name)>4:
                raise TooLongExceptin(len(name))  #抛出异常很简单,使用raise即可,但是没有处理,即捕捉
            else :
                print(name)
    
    #调用函数,执行
    name_Test()
    -----------------执行时满足条件后抛出一个用户定义的异常如下:--------------------------------------
    enter your naem:是打发斯蒂芬
    Traceback (most recent call last):
    姓名长度是6,超过长度了
      File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 21, in <module>
        name_Test()
    __main__.TooLongExceptin: <exception str() failed>
    

    3.捕捉用户手动抛出的异常

    #1.捕捉用户手动抛出的异常,跟捕捉系统异常方式一样
    def name_Test():
        try:
            name = input("enter your naem:")
            if len(name)>4:
                raise TooLongExceptin(len(name))
            else :
                print(name)
    
        except TooLongExceptin as e_result:  #这里异常类型是用户自定义的
            print("捕捉到异常了")
            print("打印异常信息:",e_result)
    
    #调用函数,执行
    name_Test()
    ==========执行结果如下:==================================================
    enter your naem:aaafsdf
    捕捉到异常了
    Traceback (most recent call last):
    打印异常信息: 姓名长度是7,超过长度了
    姓名长度是7,超过长度了
      File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 16, in name_Test
        raise TooLongExceptin(len(name))
    __main__.TooLongExceptin: <exception str() failed>
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 26, in <module>
        name_Test()
      File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 22, in name_Test
        print("打印异常信息:",e_result)
    TypeError: __str__ returned non-string (type NoneType)

    统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。

    展开全文
  • Python异常处理和异常类型

    万次阅读 2015-09-21 18:58:26
    Python异常处理和异常类型目录 Python异常处理和异常类型 目录 python2x捕获异常语法 python3x捕获异常语法 python常见的异常类型 NameError尝试访问一个未申明的变量 ZeroDivisionError除数为0 SyntaxError语法错误...

    python2.x捕获异常语法:

    try:
        ...some functions...
    except Exception, e:
        print(e)

    python3.x捕获异常语法:

    try:
        ...some functions...
    except Exception as e:
        print(e)

    注意这里 Exception, e 变成了 Exception as e

    python常见的异常类型

    1. NameError:尝试访问一个未申明的变量

    >>> v
    NameError: name 'v' is not defined

    2. ZeroDivisionError:除数为0

    >>> v = 1/0
    ZeroDivisionError: int division or modulo by zero

    3. SyntaxError:语法错误

    int int
    SyntaxError: invalid syntax (<pyshell#14>, line 1)

    4. IndexError:索引超出范围

    List = [2]
    >>> List[3]
    Traceback (most recent call last):
      File "<pyshell#18>", line 1, in <module>
        List[3]
    IndexError: list index out of range

    5. KeyError:字典关键字不存在

    Dic = {'1':'yes', '2':'no'}
    >>> Dic['3']
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        Dic['3']
    KeyError: '3'

    6. IOError:输入输出错误

    >>> f = open('abc')
    IOError: [Errno 2] No such file or directory: 'abc'

    7. AttributeError:访问未知对象属性

    >>> class Worker:
     def Work():
      print("I am working")
    
    >>> w = Worker()
    >>> w.a
    Traceback (most recent call last):
      File "<pyshell#51>", line 1, in <module>
        w.a
    AttributeError: 'Worker' object has no attribute 'a'

    8.ValueError:数值错误

    >>> int('d')
    Traceback (most recent call last):
      File "<pyshell#54>", line 1, in <module>
        int('d')
    ValueError: invalid literal for int() with base 10: 'd'

    9. TypeError:类型错误

    >>> iStr = '22'
    >>> iVal = 22
    >>> obj = iStr + iVal;
    Traceback (most recent call last):
      File "<pyshell#68>", line 1, in <module>
        obj = iStr + iVal;
    TypeError: Can't convert 'int' object to str implicitly

    10. AssertionError:断言错误

    >>> assert 1 != 1
    Traceback (most recent call last):
      File "<pyshell#70>", line 1, in <module>
        assert 1 != 1
    AssertionError

    11.MemoryError:内存耗尽异常

    12. NotImplementedError:方法没实现引起的异常

    class Base(object):
        def __init__(self):
            pass
    
        def action(self):
            #抛出异常,说明该接口方法未实现
            raise NotImplementedError

    13. LookupError:键、值不存在引发的异常

    LookupError异常是IndexError、KeyError的基类, 如果你不确定数据类型是字典还是列表时,可以用LookupError捕获此异常

    14. StandardError 标准异常

    除StopIteration, GeneratorExit, KeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。

    错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束。

    展开全文
  • 一.什么是异常 概述:异常就是在咱们日常撸代码时,...异常是分异常类型的,ArithmeticExcption则是算数异常类型 二.异常体系结构以及常见的异常类型有哪些 常见的异常类型 异常类型 说明 ArithmeticExcep

    一.什么是异常

    • 概述:异常就是在咱们日常撸代码时,代码在运行期可能会发生的执行异常,所以我们需要将部分可能会出现相应问题的代码进行异常捕获,并处理
    • 举例:现在需要将两个整数相除,但被除数为0,此时程序并不会报错
      在这里插入图片描述
    • 但执行后便会报错
      在这里插入图片描述
    • 而这个报错异常则提示算数异常,并显示出是因为/by zero ,在第8行
    • 异常是分异常类型的,ArithmeticExcption则是算数异常类型

    二.异常体系结构以及常见的异常类型有哪些

    异常体系结构

    • 常见的异常类型
    异常类型说明
    ArithmeticException算数异常
    NullPointException空指针异常
    ArrtIdexOutOfBoundException数组越界异常
    InsexOutOfBoundException索引越界异常
    ClassCastException类型转换异常
    InputFormatException输入类型不匹配
    IOException输入输出异常
    SQLExceptionSQL异常
    IllegalArgumentException非法参数异常

    三.如何捕获异常

    • 在java中可以通过try-catch语句来捕获异常,还是以开头的为例
    /**
     * @ Author: Zhangyu
     * @ Date: 2020/7/27
     * @ Description:
     */
    public class Test {
        public static void main(String[] args) {
            try {//将需要捕获异常的代码段放在try-catch中,若捕获到catch括号中的算数异常 ,则执行catch后面的代码段
                int num=1/0;
                System.out.println(num);
    
            }catch (ArithmeticException e){
                System.out.println("除数不能为零");
    
            }
    
        }
    }
    

    输出结果:
    除数不能为零

    展开全文
  • 常见的几种异常类型 Exception

    万次阅读 多人点赞 2018-05-30 10:33:01
    常见异常类型:Java中的异常分为两大类: 1.Checked Exception(非Runtime Exception) 2.Unchecked Exception(Runtime Exception)算数异常类:ArithmeticExecption空指针异常类型:NullPointerException类型...
  • java两种异常类型

    千次阅读 2018-09-19 09:51:13
    java有俩种异常类型:受检查异常和运行时异常((RuntimeException, 又叫非检查异常 ) 检查异常,这些异常从程序的角度来说是必须经过捕捉处理的,否则编译通不过,比如IOException,SQLException。 不受检查异常...
  • Java常见异常类型及原因分析

    千次阅读 2018-08-24 17:07:05
    Java常见异常类型及原因分析 0x1 NullPointerException异常 顾名思义,NullPointerException 是空指针异常。但是在 Java 中没有指针,怎么会有 空指针异常呢? 在 C++中,声明的指针需要指向一个实例(通过 new...
  • 常见的几种异常类型Exception

    万次阅读 2017-05-12 16:16:21
    常见异常类型; 算数异常类:ArithmeticExecption 空指针异常类型:NullPointerException 类型强制转换类型:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:...
  • 如何选择异常类型

    千次阅读 2019-09-29 11:49:13
    1. 如何选择异常 从个人开发经验来看,如果在一个应用中,需要开发一个方法(如某个功能的service方法),这个方法如果中间可能出现异常,那么你需要考虑这个异常出现之后是否调用者可以处理,并且你是否希望调用者...
  • 在java中常见的异常类型

    千次阅读 2019-07-30 14:47:44
    常见的异常类型 异常分为免检异常和必检异常。 Runtime和Error以及他们的子类都称为免检异常,所有其他的异常都称为必检异常 Exception 异常层次结构的根类 NullPointerException 尝试访问未...
  • C#异常类型

    千次阅读 2010-08-15 14:20:00
    c#中异常捕获catch{}常用的异常类型 Exception 类   描述 <br />SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException...
  • JS常见异常类型以及捕获异常

    千次阅读 2015-07-01 10:59:05
    先了解下JS下面经常遇到的异常类型,大概分类有如下几种异常 EvalError: raised when an error occurs executing code in eval() RangeError: raised when a numeric variable or parameter is outside of its...
  • 子类抛出的异常类型不能比父类抛出的异常类型更宽泛! 是说覆盖父类方法抛出的异常只能是以下情况(比如父类抛出IOEception异常): 1.要和父类方法抛出的异常一致,抛出IOEception异常 2.抛出的异常是父类抛出异常的...
  • 背景: 接口采用定时任务方式向MQ推送数据,每秒推送一条数据记录,因为量太大...e:异常类型+具体异常信息; e.getMessage():具体异常信息; 代码: package sort; import java.io.ByteArrayInputStream; im...
  • 那些你不知道的 JDBC 异常类型

    千次阅读 2018-12-05 19:17:15
    那些你不知道的 JDBC 异常类型 (1)java.sql.SQLException: connection holder is null 连接超时,主要是 update 或者select 的数据量太大超过,连接持有时间。 解决方式;分片查询 最好 2000以内,查询出来就...
  • 从头认识java-10.3 自定义异常类型

    千次阅读 2015-11-24 23:07:40
    这一章节我们来简单讨论一下自定义异常类型。一般来说java里面定义的异常类型已经够我们使用,但是,在实际操作中我们还需要其他一些自定义的类型。在异常部分,我们一般使用类的名字就基本足够的。下面是最简单的...
  • Java语言判断异常类型

    千次阅读 2018-11-01 12:53:22
    利用try {} catch(){} catch(){},catch里面写异常,可以接着写异常,但是要记住,最里面的catch异常是最小的,先执行第一个catch,如果没有才会执行第二个catch,从第一个到后面的等级越来越大。 ...
  • 问题:Java执行时发生异常,但是无法跳到Catch异常区块,异常类型InputMismatchException。问题描述:package Demo3;import java.util.InputMismatchException;import java.util.Scanner;public class Pri {public ...
  • shiro异常类型

    千次阅读 2018-01-22 16:28:56
    -- 身份认证异常 -->  <!-- 身份令牌异常,不支持的身份令牌 -->  org.apache.shiro.authc.pam.UnsupportedTokenException    <!-- 未知账户/没找到帐号,登录失败 -->  org.apache.shiro.authc....
  • Java中常见的异常类型

    万次阅读 多人点赞 2019-07-11 21:41:00
  • 有一个场景的操作,抛出的异常可能是InvalidSelectorException、TimeoutException、NullPointerException,所以我想针对不同的异常做出不同的处理...这样子判断不行,求大神们指点一下,我希望可以判断出异常类型
  • python 获取异常类型

    千次阅读 2019-03-19 18:23:51
    import json def austin(): try: json_data = "" json.loads(json_data) except Exception as e: print repr(e) if __name__ == '__main__': austin() 输出结果:ValueErro...
  • 在Java SE 7中,你可以使用单个catch语句块处理一种或多种类型的异常,并以改进的异常类型检查方式来重新抛出异常。 我们先来看一段代码: catch (IOException ex) {  logger.log(ex);  throw ex; catch ...
  • 有些时候,虽然我们编写的程序可以正常运行,但在输出...如果我们想要排除这些异常可能造成的影响,以Microsoft VisualStudio 2010为例,可以通过添加vs 2010的中断异常类型来确定问题位置。 首先,点击菜单栏的“调试
  • Java常用的异常类型

    千次阅读 2019-06-24 10:52:30
    Java 异常顶层父类Throwable,并实现了Serializable接口 由Throwable派生出来的异常类有两种 Error类和Exception类 Error:错误,代表JVM本身的错误,处理程序运行环境方面的异常,不能通过代码处理。比如...
  • python 常见的异常类型

    千次阅读 2018-12-26 09:50:58
    python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit...
  • python中异常捕获的完整语法 try: # 尝试执行的代码 pass except 错误类型: #针对错误类型,对应的代码处理 except Except as e: # e 是一个变量 print(“未知错误”, e) else: # 没有异常才会执行的代码 pass ...
  • 多重 catch 语句中,异常类型必须子类在前父类在后,如果你把父类放前面就执行不到后边的了, 比如你把Exception放到第一位,那么后面的就不会得到执行了, 而且通常子类的信息比父类的要更精准一点,所以通常都是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,325,778
精华内容 530,311
关键字:

异常类型