异常的基本定义

异常情形是指阻止当前方法或者作用域继续执行的问题。在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就是告诉你:这里可能会或者已经产生了错误,您的程序出现了不正常的情况,可能会导致程序失败!

异常的体系

  • Java中所有的异常类都继承自父类Throwable
  • Throwable下有两个之类Error(错误)和Exception(异常)
  • 错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。
  • 异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

Java中异常主要有两种:检查异常和非检查异常

非检查异常:

Error和RuntimeException类及其之类,javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常

检查异常:

除非检查异常外,其他都是检查异常,检查异常需要你在编译阶段就需要处理的

初始异常:

public class DivTest {

	public static void main(String[] args) {
try {
//下面两行代码可以发生数组越界异常
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = a / b;//可能发生算数异常(除0)
System.out.println("两个数相除的结果是" + c);
} catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException ie) {
System.out.println("数组越界");
} catch (Exception e) {
System.out.println("未知异常");
e = null;
}finally {
System.out.println("finally代码块中语句一定会执行");
}
} }

  

  

上面的代码展示了最简单的异常,try语句中放着可能会发生异常的代码,catch语句块中放着发生异常后的处理代码。

注意:

  • 在异常处理中,try代码块必不可少,catch和finally块至少出现其中一个,也可以都出现,此外catch块可以有一个或者多个。
  • 当出现多个catch块时,一定要保证放在前面的catch处理的异常范围比放在较后面catch块的异常范围要小

上图代码中第一个catch块处理的是Exception异常,第二个catch块中处理的异常时RuntimeException异常,第一个异常范围比第二个大,所以会出错。因为如果你把Exception放在前面的时候,后面的根本就得不到处理了。

finally:

思考一下这段代码的结果是什么:

public class Test01 {

	public static void main(String[] args) {
try {
int a=9/0;
}catch(Exception e) {
System.out.println("除0异常");
return;
}finally {
System.out.println("我是finally");
}
} }

  

try块中的代码是int a=9/0,会发生算术异常,于是来到catch中,这时输出除0异常,然后我们看到了return语句,这时程序结束,这时我们通常的理解

我们来看一下运行结果:

除0异常
我是finally

  

我们看到我是finally正常输出

在异常处理中不管前面try块还是catch块中是否出现return语句,finally块中的代码都会正常执行,除非在前面遇到System.exit(1),这行代码会直接退出虚拟机,所以finally不会执行

如果finally中也出现了return语句,那么finally中的return语句会覆盖前面try块中的return语句,尽量不要在finally中写return语句

我们一般在finally语句中释放一些物理资源,如数据库连接,文件流等

java异常那些事的更多相关文章

  1. Java——异常那些事

    异常的基本定义 异常情形是指阻止当前方法或者作用域继续执行的问题.在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就 ...

  2. Java之旅(一)---说说“异常”那些事

     从開始学习VB,就听说过"异常",认为异常处理就是加上try..catch,不让错误抛出给用户,到此为止,不要再往下问了,再问也不会了.这就是那时候的理解.如今随时项目经验的 ...

  3. Java的哪些事

    Java的哪些事--------------------------------------------------Java学习分2个方面: Java语法与Java类库 Java: A simple, ...

  4. Java异常体系简析

    最近在阅读<Java编程思想>的时候看到了书中对异常的描述,结合自己阅读源码经历,谈谈自己对异常的理解.首先记住下面两句话: 除非你能解决这个异常,否则不要捕获它,如果打算记录错误消息,那 ...

  5. 常见 Java 异常解释(恶搞版)

    常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎o(╯□╰)o) java.lang ArithmeticException 你正在试图使用电脑解决一个自己解决不了的数学问题 ...

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

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

  7. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  8. Java - 异常解析基础

    java提高篇(十六)-----异常(一) 一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位 ...

  9. JAVA异常的最佳工程学实践探索

    此文已由作者占金武授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 先说明一下背景: 项目日志中的Exception会被哨兵统一监控并报警 比较多的项目基于dubbo在做服务化 ...

随机推荐

  1. Vue路由管理之Vue-router

    一.Vue Router介绍 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的. ...

  2. M有SQL删除数据库提示Error dropping database (can't rmdir './db_test', errno: 39)

    1.执行ps aux | grep mysql,查看mysql的data目录,比如结果是--datadir=/var/lib/mysql.2.进入data目录,删除以该数据库为名字的文件夹.cd /v ...

  3. Xgboost建模

    xgboost参数 选择较高的学习速率(learning rate).一般情况下,学习速率的值为0.1.但是,对于不同的问题,理想的学习速率有时候会在0.05到0.3之间波动.选择对应于此学习速率的理 ...

  4. LiquiBase实战总结

    LiquiBase概述 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. Liquibase具备 ...

  5. MediaPlayer: 在不同控件之间实现视频的无缝切换的方法

    最近使用MediaPlayer + TextureView 实现了一个视频播放器,并且实现了它的横竖屏切换的效果,唯一美中不足的是在横竖屏切换的时候画面会卡顿一下,虽然也不影响播放,但是怕测试会报Bu ...

  6. Qt编写自定义控件39-导航标签

    一.前言 在很多菜单导航界面中,当单击了二级菜单或者三级菜单以后,顶部会显示带箭头或者其他标识的导航标签,可以单击该标签快速切换到对应的界面,也作为指示当前处于哪一级菜单下的界面,主要在WEB中大肆流 ...

  7. thymeleaf自定义属性

    例如我想给添加一个属性data-page,可以根据(SpringEL/Ognl)表达式计算获得. 需求: 期望效果 app个数大于0,有数据时链接 <xxx data-page="/a ...

  8. LeetCode_125. Valid Palindrome

    125. Valid Palindrome Easy Given a string, determine if it is a palindrome, considering only alphanu ...

  9. JEECG新建用户不用系统用户表的实现

    首先新增组织机构 和 角色: -- 新增 组织机构 INSERT INTO `t_s_depart` VALUES ('dept001', '你所在的机构', '你所在的机构的描述', null, ' ...

  10. mysql删除某一个数据库中所有的表

    SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_s ...