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. 初入angular4——实际项目搭建总结

    前言 接到一个pc端后台项目,还会加入两个安卓同事一起学习和做这个项目,需要带一下他们. 既ng1之后,我就没怎么有过其它后台框架的实际项目经验了,期间用的移动端框架也并非vue.angular系列. ...

  2. Redis持久化总结

    Redis持久化总结 因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在 ...

  3. mybatis的延迟加载

    1. 什么是延迟加载 举个例子: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 所以延迟加载即先从单 ...

  4. HDU 6149 Valley Numer II 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...

  5. 常用Linux操作指令

    -------------------------------Linux目录------------------------------- /:根目录,一般根目录下只存放目录,在Linux下有且只有一 ...

  6. php工具方法

    备忘常用方法 1.寻找子栏目(权限\菜单列表...) function getSon($list,$pid){ $arr=''; foreach ($list as $k=>$v){ if($v ...

  7. union-find算法Java实现

    package practice; /*在一个全是点的图中,循环选择两点连通,之后判断两点是否在同一通路*/ public class Testmain { public static void ma ...

  8. (八)、vpn-pptp部署

    中小型规模网站集群架构:VPN-PPTP : 矮哥linux运维群:93324526 前言: 你想管理机器吗? 你想更安全吗? 请安装VPN吧 部署 1.查看系统是否支持PPP [root@oldbo ...

  9. 详解 mpls vpn 的实现

    MPLS VPN的实现 一.实验目的 该实验通过MPLS VPN的数据配置,使学生掌握路由器相关接口的IP地址设置.路由协议的配置以及MPLS VPN的完整的创建过程, 从而加深对IP网络的IP编址. ...

  10. Java学习4——java常用命令

    javac  file.java 编译Java文件,生成file.class(字节码) java  file   执行Java程序,不加后缀.class java  -version 查看Java版本 ...