Trowable是所有异常的超类,对应的底下有两个子类,Error和Exception,java中的异常其实总体上来说有三种类型:

一、检查性异常,程序在编译的时候出现的异常,例如打开一个文件,此时程序需要抛出FileNotFoundException等相关异常,简单来说就是可预见的异常。

二、运行时异常,程序在运行时抛出的异常,与检查性异常相反,运行时异常在编译时是可以通过的,只有程序执行到异常代码时才抛出异常,例如角标越界,空指针异常等等。

三、错误,错误和异常是不同,错误其实是脱离了程序员控制的问题,错误在代码中经常被忽略。比如内存溢出,在编译过程也是发现不了的

常用的非检查性异常:

ArrayIndexOutOfBoundsException:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。

IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数。

IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。

NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常

NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

常用的检查性异常:

ClassNotFoundException:应用程序试图加载类时,找不到相应的类,抛出该异常

NoSuchFieldException:请求的变量不存在

NoSuchMethodException:请求的方法不存在

异常中常用的方法:

异常中的方法其实平时开发的时候使用的比较少,默认的try catch中会有有e.printStackTrace();如果是自定义异常的话,可以初始化参数,通过定义的方法取值,下边列举一下基本方法:

public String getMessage()   返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了

public Throwable getCause()  返回一个Throwable 对象代表异常原因。

public void printStackTrace()  打印toString()结果和栈层次到System.err,即错误输出流

public StackTraceElement [] getStackTrace() 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

捕获异常:

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

程序中对需要保护的代码,可以使用try-catch,当try 中的代码块有异常发生时,并且catch中包含对应的异常,那么异常就会进入到catch 代码块中去,catch是可以进行

多重捕捉的,根据不同的异常匹配进入不同的catch块中,有时候为了方便只用使用了Exception超类作为类型,只需要一个catch代码块

throws 和 thorw关键字的使用:

一个方法中,如果一个检查性的异常没有进行捕获,那么就需要在方法的尾部通过throws关键字将异常抛出,可一个自己手动的在代码中使用throw 一个异常,throws后可以跟上多个异常,使用逗号隔开

finally 关键字的使用:

finally 中的代码块是在try之后执行,不管是否发生了异常,finally中的代码块都会执行,比如进行io流操作时,最终都会关闭流,一般都是放在finally中执行,即使发生异常了,流也要关闭,不然io资源一直被占用,造成了资源的浪费

try-catch-finally 使用的细节:

catch 不能独立于 try 存在。

在 try/catch 后面添加 finally 块并非强制性要求的。

try 代码后不能既没 catch 块也没 finally 块。

try, catch, finally 块之间不能添加任何代码

自定义异常:

一般项目开发中,根据业务的需要可能需要自己去定义不同的异常,如果说想定义一个检查性的异常,就继承Exception,如果想定义一个非检查性的异常就继承RuntimeException类,这里其实有个坑,之前写个需求,账户余额问题,不足的话抛出了一个自定义的异常,一开始继承的是Exception,异常正常抛出,但是事物没有回滚,后来查了下,spring aop 异常捕获只对RuntimeException进行捕获,所以改成RuntimeException事物正常回滚;

java中异常的定义_java中异常的理解相关推荐

  1. java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。

    方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...

  2. java中抽象类的定义_Java中抽象类的定义和使用

    Java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础.指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类是 ...

  3. java中必检异常有哪些_Java中的受检异常

    Java中的受检异常 Java提供了三种异常类型,受检异常(checked exception).运行时异常(runtime exception).错误(error).那么这受检异常在实际开发中又有什 ...

  4. java中三种可能导致异常的情况_Java常见异常种类及产生原因

    JAVA异常共分为下列几种 Error JAVA环境编译错误 Runtime Exception 运行处异常 Exception 标准Java库方法异常 throw 用户自定义异常 异常分为两类 Er ...

  5. JAVA中的异常的触发_java中的异常

    在日常的程序开发中难免会出现遗漏并且就算代码没有问题可是由于程序运行环境的内存不够了,磁盘满了,网络连接问题等这些非正常的情况在java中都称之为异常.在java中对异常的处理有统一的异常处理机制,今 ...

  6. java敏感异常是什么_java中的异常是什么?

    Throwable(所有error和exception的父类:超类) Java将错误变成对象交给异常处理机制 Error(仅靠程序本身无法恢复的严重错误) 一般是环境的问题,JVM的问题,并非程序的问 ...

  7. java编译异常有哪些_java 中 哪些异常必须声明并捕获,否则产生编译错误

    RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类. 可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws ...

  8. java 异常 不抛_java中的不抛出的异常是什么

    RuntimeException与其子类和错误(Error)不是必须要捕获或抛出. Java异常Throwable分为两类:Error和Exception,Error类是错误,程序本身不能处理的. E ...

  9. java final定义_Java中final关键字的用法

    final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中 ...

最新文章

  1. __asm__ __volatile__(: : :memory)
  2. 2016/09/12
  3. 流式计算新贵Kafka Stream设计详解--转
  4. 李开复:AlphaGo 若打败了世界冠军,意味着什么?
  5. 【CentOS Linux 7】实验7【FTP服务器配置管理】
  6. Django 关联管理器
  7. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
  8. 有哪些小游戏的java代码_求一个Java小游戏代码(鼠标点击类小游戏)最好代码里面不要有中文...
  9. 《自然》年度十大人物:天才曹原居首 贺建奎来去匆匆
  10. Ubuntu自带简易录屏工具
  11. python几种排序_Python实现几种排序算法
  12. 计算机与打印机整体方案,打印机的一些使用方案
  13. 计算机网络学习socket--day3
  14. 我就是认真:Linux SWAP 深度解读(必须收藏)
  15. 计算机知识中h表达什么意思,计算机地基础知识hzh.ppt
  16. tomcat设置错误页面
  17. 计算机word设置信纸,word怎么设置信纸格式
  18. 计算机进入vga模式,VGA模式是什么,怎么进入VGA模式
  19. php date.getday,getDay()方法_用法示例-javascript词典-js编程词典-php中文网
  20. js获取上一个页面url

热门文章

  1. docker命令每次需要sudo操作解决方案
  2. 移动应用测试基于JAVA_Appium用于测试Android混合移动应用程序
  3. arcgis中python批处理_基于Python的ArcGIS空间数据格式批处理转换工具开发
  4. nginx访问控制allow、deny(ngx_http_access_module)
  5. 【376天】每日项目总结系列113(2018.02.16)
  6. Android 面试常问七道题
  7. TypeScript 的声明文件的使用与编写
  8. 分组交换技术HDLC配置简述
  9. 随笔 | 写代码时极有可能面临的焦虑
  10. 前端开发-Weex初试