1.异常
异常的概述:在java代码或编译或者运行的过程中出现了不能编译或运行结果受影响的情况都属于异常
使用:类对象抛出一个异常类的对象,对象中包含了该异常的产生原因、位置、类型、具体描述、等具体的数据

2.异常的体系
Throwable:解释:是所有的异常的顶层父类,抽取了所有异常的共性的属性和行为
Error:错误:属于异常中的一大分支,指的是程序员不能够进行捕获处理的异常。比如:内存溢出、栈溢出
Exception:异常;属于异常中的另一大分支,指的是我们可以使用代码捕获异常对象。
RuntimeException:运行异常,指的是那些编译没有问题,运行会发生异常的现象比如:空指针异常,除数为0异常。

3.异常的处理
概述:就是我们异常的对象的解决方式
处理方式:手动处理;jvm处理
1.手动处理
概述:需要我们自己对代码进行相关异常的处理方式。
1.声明异常:遇到异常不处理,把异常的类型声明出去,最终由jvm处理。
使用方式:使用关键字throws在方法的声明的后面声明异常的类型。
格式:方法名(参数列表)throws 异常的类型{方法体}
注意:1.声明异常不代表异常对象一定会产生,产生了就进行抛出处理,不产生就不处理,该声明照样声明【声明了有就处理,没有就不处理】
注意2:声明异常没有控制台输出等的效果,只有一个声明异常的效果
注意3:声明异常产生如果抛出去后别人没有处理或者被jvm处理了;下面的代码执行不了,如果别人把异常处理了,如果别人处理了,代码继续执行。
2.捕获异常处理:
1.当方法体中可能出现异常,方法体自己去捕获这个异常对象,并对异常对象内容进行相关处理
格式:
1.try…catch
2.try…catch…finally
3.try…finally
1.try…catch
具体格式:try{可能出现异常的代码段}catch(异常类型 变量名){异常解决的代码段}
try:试试的意思。尝试执行有可能有异常的代码。catch:捕获的意思,如果try中发生异常了,捕获该异常的对象并进行处理():书写catch捕获到的异常对象;{}:书写 处理异常的代码
执行流程:
1.try当中的代码没有发生异常,代码自上而下来执行,执行过程中跳过catch块
2.try当中的代码发生异常;触发catch块到发生异常的地方进行异常对象的捕获,代码执行顺序就会从异常处直接跳转到catch块中执行,完毕继续执行catch块下面的代码
3.catch括号中如果出现异常,可以声明处理也可以捕获异常。
2.多个catch块
具体格式:try{有可能有异常的代码段}catch(异常对象1){解决异常1的方案}(异常对象2){解决异常2的方案}。。。catch(异常对象n){解决异常n的方案}
注意事项:(面试题)
1.多个catch块,执行的时候只会执行其中之一或者一个也不执行
2.多个异常有了同时触发的条件,实际以第一个被触发的异常为准,其他的异常不会被触发,对应执行的是第一个异常的catch块,其他catch块不执行;;;;catch块中不可以写break;但是可以写return 提前【异常处理完】结束方法
3.catch的多个异常对象之间如果有子父类关系,catch异常对象的顺序有要求【自上而下遵循由小到大;子类类型在对象在前,父类类型对象在后】
4.捕获的异常对象处理的时候选择catch块时遵循:
1.优先匹配自己类型的catch块
2.没有自己类型的对象catch块,就近执行最近的父类的对象的catch块
3.自己和父类对象的catch块都没有,那就报错
5.jdk1.7之后,异常捕获时异常类型可以使用|【或】表示【多种不同的异常要想用相同的处理方式的时候可以使用。】
1.多种异常类型对象,可以使用相同的处理方式
2.异常类型是相互独立没有关系的类型【不能继承关系】
格式:catch(异常类型1|异常类型2|异常类型3){}
3.try…catch…finally
具体格式:
try{有可能产生异常代码}catch(异常对象){对异常对象的解决方案}finally{必须执行的代码}
特点
finally里面的代码不管try当中的代码是否会发生异常,它肯定执行
使用场景:try。。catch代码块即将结束前执行
注意事项:
1.中间的catch块可以有多个
2.finally不可以单独使用,必须跟在try代码块后面
4.try…finally
格式:
try{有可能出现异常的代码}finally{肯定执行的代码}
解释:不怎么使用,不可以处理异常,单纯为了finally的使用,异常没有被处理
5.处理异常使用格式注意事项:
1.try代码块可以单独使用【单独使用没有意义】
2.catch块不能单独使用,不能离开try代码块
3.finally不能单独使用,要结合try代码块使用。
3.jvm的异常处理方式
概述:jvm是执行者,调用的main方法;其他方法都需要通过main方法直接或者间接的调用,异常一旦产生,自己又不想解决采用声明的方式来抛出异常,不停的抛来抛去最终抛到jvm,jvm最后一个调用者抛不了必须要自己处理。
jvm的处理方式:
先把程序给停止,然后捕获异常处理【把异常对象中的相关信息进行打印。】
jvm异常的处理和捕获异常处理的区别?
捕获处理异常:
catch块下面的代码可以继续执行出效果【jvm没有停止】
jvm处理异常:
产生异常代码处后面的所有代码都不能够执行了【jvm直接停止】
4.异常分类:
1.编译异常:
概述:在代码编译过程中会对相关代码进行格式和语法的检验,如果不满足就会直接报错显示,不会将错误放到运行去。
编译异常都属于Exception的子类,必须要进行处理才可能继续执行
2.运行异常
概述:在编译的时候不会对代码进行一些相关的检查,只有在运行的时候才会发现有问题的异常。
运行异常都是RuntimeException的子类,可以处理也可以不处理【通过声明的方式交给jvm来处理】
5.异常体系的常用方法:
概述:异常体系的方法全部定义在Throwable类中,其他异常类没有定义任何的方法,都是继承Throwable中的方法。
构造方法:
1.Throwable():创建一个没有任何异常信息的异常对象
2.Throwable(String Message):创建一个只有异常信息描述的对象
3.Throwable(Throw able t):创建一个有异常原因的异常对象。
4.Throwable(String message,Throw able t):创建一个有异常信息和异常原因的异常对象。
普通方法:
1.getCause:获取异常对象的异常原因
2.getMessage:获取异常的提示详细信息[常用]
3.toString:获取异常对象的详细属性信息
4.printStackTrace:打印异常的调用地址信息【常用】
6.异常的关键字
throws关键字:
概述:抛出,抛出的是异常的类型;主要使用在异常处理的声明异常中,主要是在方法的参数列表后面抛出异常的类
throw关键字:
概述:抛出;抛出的是异常的对象。主要使用在方法体中用来产生真正的异常对象,一定是产生了异常对象
7.自定义异常
概述:Java开发中大部分使用的是异常jdk都给大家提前写好了,直接拿来用,但是一些公司开发中jdk提供的异常类不能满足自己的业务需求,就得自己书写一个异常类为自己所用。
分类:
编译异常:
1.创建一个类,类名默认要求以Exception结尾【约定俗称】
2.要这个类继承Exception
3.提供所有的空参构造
运行异常:
1.创建一个类,类名要求以Exception结尾【约定俗称】
2.要这个类继承RuntimeException
3.提供所有的空参构造

异常体系【处理方式:声明异常、捕获异常】相关推荐

  1. 22.Java之异常处理(异常介绍,异常体系图一览,运行时异常,编译异常,try-catch方式处理异常,throws异常处理,自定义异常,throws 和 throw 的区别)

    22.1.异常介绍 Java语言中,将程序执行中发生的不正常情况称为 "异常" (开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件分为两大类: Error:Ja ...

  2. 异常-throws的方式处理异常

    1 定义功能方法时,需要把出现的问题暴露出来让调用者去处理.那么就通过throws在方法上标识. 2 3 package cn.itcast_05; 4 5 import java.text.Pars ...

  3. java声明异常必须抛出吗_简述java中抛出异常的两种方式

    java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看 ...

  4. try catch异常后会执行后面的代码吗_Java的异常体系

    前言 大家在写代码的过程中,异常是不可能完全避免的,那么我们在尽可能规避错误的同时,还要注意如何去捕获和处理异常,此文带你详细理解Java的异常体系. 定义 Java异常指在程序运行时可能出现的一些错 ...

  5. java代码抛出异常_Java中编写代码出现异常,如何抛出异常,如何捕获异常

    异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException.我们通过图解来解析下异常产生的过程. 工具类 classArrayTools ...

  6. 【Java基础】HashMap扩容 | CopyOnWriteArrayList 的底层原理 | 字节码 | Java 异常体系

    1. HashMap的扩容机制 JDK 1.7 扩容是针对数组进行扩容,链表是不需要进行扩容的.扩容时先生成原来数组两倍大小的新数组,在把原来老数组上的链表上的元素转移过去.具体在转移链表中元素的步骤 ...

  7. java常见异常思维导图_21_异常_第21天(异常、企业面试题,思维导图下载)

    今日内容介绍 1.异常概述和继承体系 2.异常原因以及处理方式 3.运行时期异常 4.方法重写的异常处理 5.Throwable类常见方法 6.自定义异常 01异常的概述 * A: 异常的概述 * a ...

  8. Java中的异常总结详解(异常类型、声明异常、抛出异常、捕获异常)

    Java 异常解析 前言 一.异常概述 二.异常类型 1.系统错误(Error) 2.编译时异常(Exception) 3.运行时异常(RuntimeException) 三.处理编译时异常的更多知识 ...

  9. 深入理解Java中异常体系

    任何程序都追求正确有效的运行,除了保证我们代码尽可能的少出错之外,我们还要考虑如何有效的处理异常,一个良好的异常框架对于系统来说是至关重要的.最近在给公司写采集框架的时候系统的了解一边,收获颇多,特此 ...

最新文章

  1. 如何安装系统认证签名过的APK
  2. 记录一些精品开源项目
  3. ie-css3.htc参数无效,ie-css3.htc怎么用?
  4. WIN10 中mysql8 忘记密码
  5. php java 架构_JAVA和PHP到底谁才是老大?
  6. cf570 D. Tree Requests
  7. 赚大钱必备 怎样成为赚钱高手(图)
  8. java list stream 去除 null_Stream流的这些操作,你得知道,对你工作有很大帮助
  9. 套用这套模板,玩转周报、月报、年报更省事
  10. php paypal网站对接,php 接入 paypal 支付
  11. testmeshpro合批_Unity合批原理及失败的原因
  12. 用python定时自动发微博_Python脚本实现自动发带图的微博
  13. 纯干货,linux内存管理——内存管理架构(建议收藏)
  14. 以太坊源码学习(一) 正本清源
  15. linux下复制文件并重命名,Linux 批量复制并重命名 和 批量复制文件到多个文件夹...
  16. Linux根据关键字批量杀进程
  17. SQL正则盲注-regexp
  18. PMP项目管理项目成本管理
  19. 如何在一个创业公司做好架构师
  20. 使用python调用minitab_Minitab小技巧:在Minitab中使用按钮快速运行Python脚本

热门文章

  1. 【Linux】处理数据文件
  2. 给xen虚拟机添加硬盘分区格式化
  3. ISO9126软件质量模型
  4. [转]automaticallyAdjustsScrollViewInsets(个人认为iOS7中略坑爹的属性)
  5. Win7搭建Django开发环境
  6. LINQ中的Lambda表达式
  7. JavaScript函数调用规则
  8. 第二代飞信机器人“小达”问世了
  9. python __slots__ [转]
  10. IEEE 第二届大数据、人工智能与物联网工程国际会议 (IEEE-ICBAIE 2021)