1.异常概念

  • 异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
  • 设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。
  • Java语言使用异常处理机制为程序提供了异常处理的能力

2.异常处理机制

  • Java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常。
  • 当JVM接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
  • 如果JVM找不到可以捕获异常的代码,则运行时系统将终止,相应的Java程序也将退出。

3.异常的分类

  • Java程序运行过程中所发生的异常事件从严重性可分为两类:

– 错误(Error):JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的责任

  • 这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。

– 异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。

  • 这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
  • 程序员通常只能处理异常(Exception),而对错误(Error)无能为力
  • 从编程角度分:

– 非受检(unchecked)异常:编译器不要求强制处置的异常

  • 一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常

    • java.lang.RuntimeException及它的子类都是非受检异常:

      • 错误的类型转换:java.lang.ClassCastException
      • 数组下标越界:java.lang.ArrayIndexOutOfBoundsException
      • 空指针访问:java.lang.NullPointerException
      • 算术异常(除0溢出):java.lang.ArithmeticException

– 受检(checked)异常:编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。

  • 没有找到指定名称的类:java.lang.ClassNotFoundException
  • 访问不存在的文件:java.io.FileNotFoundException
  • 操作文件时发生的异常:java.io.IOException
  • 操作数据库时发生的异常:java.sql.SQLException

4.异常的处理

  • try语句

– try{ … }语句包含了一段代码,这段代码就是一次捕获并处理异常的范围。

– 在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。

    在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

– 在catch中声明的异常对象(catch(ExceptionName e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。如:

  getMessage() 方法,用来获得有关异常事件的字符串信息。

  printStackTrace() 方法,用来跟踪异常事件发生时执行堆栈的内容。

– 使用多重 catch 语句时,异常子类一定要位于异常父类之前。

– 如果没有异常产生,所有的catch段的代码都会被忽略不执行

注意:try和catch都不能单独使用,必须匹配使用才可以完成异常的监控和处理。

语法:

try{
}catch(异常类型 对象){
}

异常处理:

1.异常:程序在运行期间发生的不正常事件,它会打断指令的正常流程。

异常都是发生在程序的运行期,编译出现的问题叫语法错误。

2.异常的处理机制:

1) 当程序在运行过程中出现了异常,JVM自动创建一个该类型的异常对象。同时把这个异常对象交给运行时系统。(抛出异常)

2) 运行时系统接受到一个异常对象时,它会再产生异常的代码附近查找相应的处理方式。

3) 如果有处理异常的代码,处理完后回到代码正常执行流程。如果没有,JVM就会中断程序的执行。

3.异常的分类:

java.lang.Throwable

|-- Error错误:JVM内部的严重问题。无法恢复。程序开发人员不用处理。

|-- Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理。

|--RuntimeException:也叫非受检异常(unchecked exception)。这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处理。 也就是说,这类异常再程序中,可以进行处理,也可以不处理。

|--非RuntimeException:也叫受检异常(checked exception)。这类异常是由一些外部的偶然因素所引起的。Java编译器强制要求处理。也就是说,程序必须进行对这类异常进行处理。

4.常见异常类:

1)非受检:NullPointerException, ClassCastException, ArrayIndexsOutOfBoundsException, ArithmeticException

2)受检:FileNotFoundException,IOException,SQLException,

5.异常处理的两种方式:

1)显式用try/catch进行处理:在异常的代码附近显示用try/catch进行处理(不合理),运行时系统捕获后会查询相应的catch处理块,再catch处理块中对该异常进行处理。

try{
//可能会出现异常的代码片段
}catch(异常类型1 变量名){ //处理制定类型的异常
//对该类型异常的处理代码段;
e.printStackTrace();
}catch(){
}[finally{
//无论是否发生异常都要执行的代码段;
//经常用来清理资源
}]

2)向上声明:用throws关键字,向外声明。声明本方法可能会抛出的异常列表。

...方法名(参数列表) throws 异常类型1,异常类型2

向上声明是告诉本方法的调用者,在使用本方法时,应该对这些异常进行处理。

6.手动抛出一个异常: 当程序逻辑不符合期望时,要中止后面代码的执行时。

在方法的代码段中,可以使用throw关键字手动抛出一个异常。

注意:如果手动抛出的是受检异常,那么本方法必须进行处理(应该采用向上声明这个异常); 如果手动抛出的是非受检异常,那么可以进行处理,也可以不处理。

7.自定义异常:当需要一些跟特定业务相关的异常信息类时。

可以继承继承Exception来定义一个受检异常。也可以继承自RuntimeException或其子类来定义一个非受检异常。

8.异常概括:一个图两种处理方式五个关键字.

9.异常实践:

观察抛出的异常的名字和行号很重要。

应该捕获和处理那些已知如何处理的异常,传递那些不知如何处理的异常。

尽量减少try语句块的体积。

for(int i=1;i<=1000;i++){
try{
...
}catch(...){
}
}

尽量减少try-catch语句的嵌套。

在catch块代码段中,应该打印除该异常的堆栈跟踪信息以方便调试。

使用throws关键字来声明方法可能会抛出的异常

throws可以声明方法可能会抛出一个或多个异常,异常之间用','隔开

如果声明的可能会抛出的异常是非受检的,该方法的调用者可以处理也可以不处理。

如果声明的可能会抛出的异常是受检的,该方法的调用者必须进行处理。

用throw关键字来手动抛出一个异常,

如果手动抛出的异常是一个受检异常,那么必须进行处理

处理方式有两种:

1.显示用try/catch进行处理(不合理)

2.用throws向外声明(合理的处理方法) : 应捕获和处理那些已知如何处理的异常,而传递那些不知如何处理的异常。

调试: Debug  

双击:加断点。

F5:进入方法

F6:下一步(单步执行)

F7:从方法返回

F8:下一个断点,如果没有下一个断点,就结束。

Java基础13一异常的更多相关文章

  1. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  2. Java基础学习补充 -- 异常处理和log4j日志

    Java中的异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. Java中所有异常的基类Throwable:Throwable又分为Error类和Excepti ...

  3. 【java基础 13】两种方法判断hashmap中是否形成环形链表

    导读:额,我介绍的这两种方法,有点蠢啊,小打小闹的那种,后来我查了查资料,别人都起了好高大上的名字,不过,本篇博客,我还是用何下下的风格来写.两种方法,一种是丢手绢法,另外一种,是迷路法. 这两种方法 ...

  4. Java基础语法<十一> 异常 断言 日志 调试

    1 处理错误 1.1 异常分类 Error类层次描述了Java运行时系统的内部错误和资源耗尽错误. 设计Java程序时,主要关注Exception层次结构. 由程序错误导致的异常属于RuntimeEx ...

  5. Java基础13:反射详解

    本节主要介绍Java反射的原理,使用方法以及相关的技术细节,并且介绍了关于Class类,注解等内容. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech ...

  6. Java基础教程(22)--异常

    一.什么是异常   异常就是发生在程序的执行期间,破坏程序指令的正常流程的事件.当方法中出现错误时,该方法会创建一个对象并将其交给运行时系统.该对象称为异常对象,它包含有关错误的信息,包括错误的类型和 ...

  7. java基础学习日志--异常案例

    package test7; public class InvalidScroreException extends Exception { public InvalidScroreException ...

  8. Java 基础篇之异常

    异常 异常层次 Error:Java 运行时系统的内部错误和资源耗尽错误.应用程序不应该抛出这种类型的对象.如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全地终止之外,再也无能为力了. Ex ...

  9. Java 基础系列:异常

    Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流.为了能够及时有效地处理程序中的运行错误,必须使用异常类. 1. 异常类型 Thro ...

随机推荐

  1. adjtimex和时钟的几个概念tick,freq,ppm,jiffies

    adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...

  2. 使用Scrapy爬取图书网站信息

    重难点:使用scrapy获取的数值是unicode类型,保存到json文件时需要特别注意处理一下,具体请参考链接:https://www.cnblogs.com/sanduzxcvbnm/p/1030 ...

  3. 腾讯云,搭建python开发环境

    准备工作 任务时间:5min ~ 10min Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.首先我们来看看系统中是否已经存在 Python ,并安装一些开发工具包: 安装前准备 ...

  4. 大专生自学Python到找到工作的心得

    先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...

  5. 基于Python3.7和opencv的人脸识别(含数据收集,模型训练)

    前言 第一次写博客,有点紧张和兴奋.废话不多说,直接进入正题.如果你渴望使你的电脑能够进行人脸识别:如果你不想了解什么c++.底层算法:如果你也不想买什么树莓派,安装什么几个G的opencv:如果你和 ...

  6. Java基础学习总结(72)——提升 java 代码的运行效率

    前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...

  7. Ubuntu 安装有道词典

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51302546 官网首页:有道词典 其中 ...

  8. poj 2553强连通+缩点

    /*先吐槽下,刚开始没看懂题,以为只能是一个连通图0T0 题意:给你一个有向图,求G图中从v可达的所有点w,也都可以达到v,这样的v称为sink.求这样的v. 解;求强连通+缩点.求所有出度为0的点即 ...

  9. [Cogs727] [网络流24题#2] 太空飞行计划 [网络流,最小割]

    建图:源点—(w[i])—>实验—(∞)—>仪器—(cost[i])—>汇点, 如果该实验造成收益,则仪器到汇点的边在最小割中, 如果该实验造成损失,则源点到实验的边在最小割中, 故 ...

  10. Hadoop2.2.0 注意事项

    1.启动前必须把防火墙关了,要不然会导致nodemanager启动不了. 关闭防火墙:service iptables stop 永久关闭(重启后默认关闭):chkconfig iptables of ...