Java 异常机制

  1. 什么是异常

    异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程
  2. 为什么要有异常
    • 什么出错了
    • 哪里出错了
    • 为什么出错了
    • 通过异常可以降低错误处理代码的复杂度
  3. 异常的结构

    主要是两大类错误 error异常exception 它们均继承自Throwable

  • Error 表示不希望被程序捕获或者是程序无法处理的错误。 比如StackOverflowError经常由递归操作,向这样类型的操作是jvm错误我们是无法挽回的。
  • Exception 错误是假设程序猿们回去处理这些异常例如 数据库连接错误 网络连接错误,Exception也分为两种检查类型(checked)和未检查类型(unchecked)、
    • 检查型的需要强制加try catch语句
    • 非检查型的没有这些限制

4.异常的处理机制

Java异常处理的本质是抛出异常和捕获异常

  • 抛出异常 由上层代码进行处理

      	if(object== null){
    throw new NullPointerException();
    }
  • 捕获异常 捕获之后由当前catch中的代码块进行操作

      try{
    //做一些可能出现异常错误的操作
    }catch(Exception e){
    //对异常之后进行操作
    }finally{
    //无论是否出现异常都会经过这里
    }

下面通过一次从磁盘中读取一个文件来演示一遍完整的异常捕获

void fun(){
int count=0;
InputStreamstreamReader = null;
try{
streamReader=newFileInputStream(new File("test.txt"));
while(streamReader.read()!=-1) {
count++;
}
}catch (IOException e) {
e.printStackTrace();
}finally{
try{
if(streamReader != null){
streamReader.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
}

上面我们只是获取到Java的异常且对其进行了处理,但是我们也可以获得异常之后不进行处理进行抛出

有关抛出的有两个异常抛出关键字有两个 throwthrows 现在咱们就对其进行分析。

  • throw 程序执行完throw语句之后立即停止;throw后面的任何语句不被执行,最邻近的try块用来检查它是否含有一个与异常类型匹配的catch语句。

       void fun(){
    try{
    throw new NullPointerException();
    }catch(NullPointerException e){
    throw e;
    }
    } void fix(){
    try{
    fun();
    }catch(NullPointerException e){
    System.out.println("Recaught: "+e);
    }
    }
  • throws 表示一个方法可能会抛出异常,但是这个方法不对它进行处理而是向上抛出,这样这个方法的调用者保护它自己而不发生异常。

    代码示例

      public void fun() throws Exception{
    // 做一些可能会出现异常的操作
    }

根据上面那个示例来进行更改来演示throws

	void fun() throws Exception{
//操作可能出现异常
throw new NullPointerException();
} void fix(){
try{
fun();
}catch(NullPointerException e){
System.out.println("Recaught: "+e);
}
}

异常使用指南

  1. 在多重Exception之后再加一个Exception的来防止异常遗漏
  2. 对于调用不确定是否出现错误的方法,用try将代码块包住。处理潜在的异常
  3. 尽量处理异常而不是就catch住然后打印错误信息
  4. 根据已有的业务逻辑来对异常进行异常逻辑操作
  5. 在一些时候尽量使用finally去释放占用的资源

Java 异常机制的更多相关文章

  1. 全面理解java异常机制

    在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大V,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...

  2. 【55】java异常机制剖析

    一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用.有异常就说明程序存在问题,有助于我们 ...

  3. Java异常机制及异常处理建议

    1.Java异常机制 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通过API中Throwable类的众多子类 ...

  4. [Java学习笔记] Java异常机制(也许是全网最独特视角)

    Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...

  5. Java异常机制

    Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...

  6. Java异常机制简介

    什么是异常? 异常一般是指程序在编译期没有问题,但是在程序运行期出现的错误,一个程序会因为出现异常而终止运行,也就是我们常说的挂掉,在多线程下,异常只会影响所在的线程,对其他线程没有影响. Java异 ...

  7. Java基础 -- 深入理解Java异常机制

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  8. 一张图搞清楚Java异常机制

    下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的. Throwable Throwable是Java异常的顶级类,所有的异常都继承于这个类. Error,Excepti ...

  9. Java异常机制,自定义异常以及spring boot异常设计方案

    异常机制: 异常概念 异常分类 异常的处理方法 自定义异常 springboot 的异常解决方案

随机推荐

  1. <当幸福来敲门>之一些很喜欢的台词收藏

    <当幸福来敲门> ================ ================

  2. 斜率DP hdu 3507

    Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique, he s ...

  3. canvas粒子系统的构建

    前面的话 本文将从最基本的imageData对象的理论知识说开去,详细介绍canvas粒子系统的构建 效果演示 下面是实例效果演示,博文结尾有全部源码 imageData 关于图像数据imageDat ...

  4. oracle之备份详解

    1.冷备份(执行冷备份前必须关闭数据库) 物理备份(备份物理数据库文件) 2.热备份(热备份是当数据库正在运行时进行数据备份的过程.执行热备份的前提是:数据库运行在可归档日志模式.适用于24X7不间断 ...

  5. jQuery表单事件

    1.focus() 获得焦点,适用于所有元素2.blur() 失去焦点,适用于所有元素3.change() 当内容改变时触发 只适用于 input textarea select4.select() ...

  6. python的计数引用分析(一)

    python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1 ...

  7. Jsp/html页面删除前进行删除提示

    HTML代码 <body> <a href="javascript:if(window.confirm('是否?')){window.location.href='test ...

  8. python基础教程(十一)

    迭代器 本节进行迭代器的讨论.只讨论一个特殊方法---- __iter__  ,这个方法是迭代器规则的基础. 迭代器规则 迭代的意思是重复做一些事很多次---就像在循环中做的那样.__iter__ 方 ...

  9. Spark算子讲解(一)

    1:Zip算子 def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)] 将两个RDD做zip操作,如果当两个RDD分区数目 ...

  10. 【找不到与请求 URI匹配的 HTTP 资源】(转)

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议         WCF ...