Java中所有异常的父类是Throwable类,在Throwable类下有两大子类:

一个是Error类,指系统错误异常,例如:VirtualMachineError 虚拟机错误,ThreadDeath 线程死锁。一般如果是Error类的异常的话,就是程序的硬伤,就好比是工厂里断水断电,机器损坏了。

另一个是Exception类,指编码、环境、用户操作输入等异常,这个是比较常见的异常类,Exception类下面又有两个子类,RuntimeException 非检查异常和检查异常,非检查又称为运行时异常,在RuntimeException异常中有几个常见的子类,例如:

InputMismatchException 输入不匹配异常

ArithmeticException 算术运算异常

NullPointerException 空指针异常

ArrayIndexOutOfBoundsException 数组下标越界异常

ClassCastException 类型转换异常

检查异常中的子类有:

IOException 文件异常

SQLException SQL数据库错误异常

在实际的开发中,处理异常一般使用以下三种方式:

一、使用try-catch语句块捕获和处理异常

使用try-catch 以及 try-catch-finally 来捕获和处理异常时,catch里的异常列表一般是子类在前,父类在后,不然编译时程序会报错。示例如下:

 1 import java.util.InputMismatchException;
2 import java.util.Scanner;
3
4 public class 异常处理 {
5
6 public static void main(String[] args) {
7
8 System.out.println("请输入你的年龄");
9 Scanner input = new Scanner(System.in);
10 try{
11 System.out.println("请输入第一个数:");
12 int one = input.nextInt();
13 System.out.println("请输入第二个数:");
14 int two = input.nextInt();
15 System.out.println("两数相除结果为:"+one/two);
16 }catch(InputMismatchException e){
17 System.out.println("请输入整数");
18 }catch(ArithmeticException e){
19 System.out.println("除数不能为零");
20 }catch(Exception e){
21 System.out.println("程序执行中出现异常");
22 }finally{
23 System.out.println("程序执行结束!");
24 }
25
26
27
28 }
29
30 }

二、使用throws关键字声明将要抛出何种类型的异常

语法

public void 方法吗(参数)throws 异常列表{ throw new Exception(); }

示例如下:

 1 public class ThrowDemo {
2
3 public static void main(String[] args) {
4
5 ThrowDemo td = new ThrowDemo();
6 try {
7 td.test(10, 0);
8 } catch (Exception e) {
9 System.out.println("异常抛出");
10 }
11 }
12
13 public void test(int a,int b) throws Exception{
14 int c = a/b;
15 System.out.println("计算结果为:"+c);
16
17 }
18
19 }

三、自定义异常类

有的时候我们抛出的异常在Throwable类中没有定义,就需要我们自己自定义一个异常的类,比如我们实际开发中需要用到一个“开车别喝酒”的异常,我们就可以定义一个这样的异常类来处理我们项目中需要处理的异常。

自定义异常类的语法:

class 自定义异常类 extends 异常类型{}

自定义异常类需要继承和它类型相近的Throwable类里面的子类,或者是我们直接让自定义异常类继承Exception类,示例如下:

 1 /**
2 * 自定义一个异常类
3 * @author lenovo
4 *
5 */
6 public class MyThrow extends Exception{
7
8 public MyThrow(){
9
10 }
11
12 public MyThrow(String mess){
13 super(mess);
14 }
15 }

使用这个异常类的示例如下:

 1 public class ChainTest {
2
3 /**
4 * test1():抛出"喝大了"异常;
5 * test2():调用test1(),捕获"喝大了"异常,并且包装成运行时异常,继续抛出;
6 * main方法中调用test2(),尝试捕获test2()方法抛出的异常
7 */
8
9 public static void main(String[] args) {
10 ChainTest ct = new ChainTest();
11 ct.test2();
12 }
13
14 public void test1() throws MyThrow{
15 throw new MyThrow("喝酒别开车!");
16 }
17
18 public void test2(){
19 try {
20 test1();
21 } catch (MyThrow e) {
22 RuntimeException newExc = new RuntimeException("司机一滴酒,亲人两行泪~~");
23 newExc.initCause(e);
24 throw newExc;
25 }
26 }
27
28 }

运行结果:

Exception in thread "main" java.lang.RuntimeException: 司机一滴酒,亲人两行泪~~
at xbw.ChainTest.test2(ChainTest.java:24)
at xbw.ChainTest.main(ChainTest.java:13)
Caused by: xbw.MyThrow: 喝酒别开车!
at xbw.ChainTest.test1(ChainTest.java:17)
at xbw.ChainTest.test2(ChainTest.java:22)
... 1 more

Java异常处理实际应用中的经验与总结:

1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理;

2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常;

3、对于不确定的代码,也可以加上try-catch,处理潜在异常;

4、尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出;

5、具体如何处理异常,要根据不同的业务需求和异常类型去决定;

6、尽量添加finally语句块去释放占用的资源。

RuntimeException异常处理汇总的更多相关文章

  1. Java RuntimeException异常处理汇总

    Java中所有异常的父类是Throwable类,在Throwable类下有两大子类: 一个是Error类,指系统错误异常,例如:VirtualMachineError 虚拟机错误,ThreadDeat ...

  2. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  3. Oracle 异常处理汇总

    Oracle 异常处理汇总 1.plsql无法连接 安装oracle,中间录入密码,用户是:sys,pass: 录入的密码. 连接数据库,建议创建新的用户,最好别直接用sys 安装完毕,则需要配置Ne ...

  4. 转 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    异常处理汇总 ~ 修正果带着你的Net飞奔吧!   异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具  h ...

  5. 异常处理汇总 ~ 修正果带着你的Code飞奔吧!

    异常处理汇总-运维系列 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具  http://www.cnblogs.com/dunit ...

  6. Java中常见的异常处理汇总

    1. java.lang.nullpointerexception  这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的 ...

  7. Mongodb中经常出现的错误(汇总)child process failed, exited with error number

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-数据库系列  http://www.cnblogs.com/dun ...

  8. 平台之大势何人能挡? 带着你的Net飞奔吧!

    镇楼图: 跨平台系列: Linux基础 1.Linux基础学习 By dnt http://www.cnblogs.com/dunitian/p/4822807.html 环境配置 1.Hyper-v ...

  9. 事务日志已满,原因为“ACTIVE_TRANSACTION”

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列  http://www.cnblogs.com/dunitia ...

随机推荐

  1. robot framework 如何获取隐藏元素的文本,以及可见元素的文本

    1.下图是获取可见元素的文本内容,运行后得到:${B_name}=公告管理:假设公告管理不可见,那么${B_name}=‘’(为空)

  2. DRF 01

    目录 DRF 接口 概念 YApi接口文档 Postman接口测试 RESTful接口规范 URL设计 响应结果 响应状态码 数据状态码 数据状态信息 数据本身 五大请求方式 简单实现 DRF drf ...

  3. 基于【 centos7】一 || 安装ELK

    一.安装jdk 上传安装包并解压:tar -zxvf ... 配置环境变量: 在配置文件中添加如下配置信息:vi /etc/profile export JAVA_HOME=/usr/local/jd ...

  4. CPCT精细化运营:客户、产品、渠道、时机

    关键词:CPCT.精细化运营思维.客户.产品.渠道.时机.运营 电信运营商市场饱和,用户新增主要靠弃卡后重新入网以及异网用户策反. 用户新增已如此艰难,所以更加关注存量用户经营. 运营商营销资源不断收 ...

  5. ntp时间同步简介

    网络时间协议(Network Time Protocol) 安装 # sudo apt-get install ntp 官网下载:http://www.ntp.org/downloads.html 本 ...

  6. Flutter——BottomNavigationBar组件(底部导航栏组件)

    BottomNavigationBar常用的属性: 属性名 说明 items List<BottomNavigationBarItem> 底部导航条按钮集合 iconSize icon c ...

  7. 关于stm32 SDIO初始化TF卡 失败的问题

    类似问题:http://www.openedv.com/thread-33232-1-1.html 现象:初始化4bit SDIO模式的TF卡,卡死在初始化过程中. 问题现象代码移植于野火开发板相关例 ...

  8. Lucene简单了解和使用

    一,Lucene简介 1 . Lucene  是什么? Lucene 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...

  9. 算法设计与分析 - 李春葆 - 第二版 - html v2

    1 .1 第 1 章─概论   1.1.1 练习题   1 . 下列关于算法的说法中正确的有( ).   Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的   .算法必须在有限步操作之后停止   .算法 ...

  10. webpack安装,常见问题和基本插件使用

    一:webpack认识 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关 ...