Java RuntimeException异常处理汇总
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里的异常列表一般是子类在前,父类在后,不然编译时程序会报错。示例如下:
import java.util.InputMismatchException;
import java.util.Scanner; public class 异常处理 { public static void main(String[] args) { System.out.println("请输入你的年龄");
Scanner input = new Scanner(System.in);
try{
System.out.println("请输入第一个数:");
int one = input.nextInt();
System.out.println("请输入第二个数:");
int two = input.nextInt();
System.out.println("两数相除结果为:"+one/two);
}catch(InputMismatchException e){
System.out.println("请输入整数");
}catch(ArithmeticException e){
System.out.println("除数不能为零");
}catch(Exception e){
System.out.println("程序执行中出现异常");
}finally{
System.out.println("程序执行结束!");
} } }
二、使用throws关键字声明将要抛出何种类型的异常
语法
public void 方法吗(参数)throws 异常列表{ throw new Exception(); }
示例如下:
public class ThrowDemo {
public static void main(String[] args) {
ThrowDemo td = new ThrowDemo();
try {
td.test(10, 0);
} catch (Exception e) {
System.out.println("异常抛出");
}
}
public void test(int a,int b) throws Exception{
int c = a/b;
System.out.println("计算结果为:"+c);
}
}
三、自定义异常类
有的时候我们抛出的异常在Throwable类中没有定义,就需要我们自己自定义一个异常的类,比如我们实际开发中需要用到一个“开车别喝酒”的异常,我们就可以定义一个这样的异常类来处理我们项目中需要处理的异常。
自定义异常类的语法:
class 自定义异常类 extends 异常类型{}
自定义异常类需要继承和它类型相近的Throwable类里面的子类,或者是我们直接让自定义异常类继承Exception类,示例如下:
/**
* 自定义一个异常类
* @author lenovo
*
*/
public class MyThrow extends Exception{ public MyThrow(){ } public MyThrow(String mess){
super(mess);
}
}
使用这个异常类的示例如下:
public class ChainTest {
/**
* test1():抛出"喝大了"异常;
* test2():调用test1(),捕获"喝大了"异常,并且包装成运行时异常,继续抛出;
* main方法中调用test2(),尝试捕获test2()方法抛出的异常
*/
public static void main(String[] args) {
ChainTest ct = new ChainTest();
ct.test2();
}
public void test1() throws MyThrow{
throw new MyThrow("喝酒别开车!");
}
public void test2(){
try {
test1();
} catch (MyThrow e) {
RuntimeException newExc = new RuntimeException("司机一滴酒,亲人两行泪~~");
newExc.initCause(e);
throw newExc;
}
}
}
运行结果:
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语句块去释放占用的资源。
注:以上内容是个人学习和工作中的总结,如有不完善和需要改正的地方,可以留言,谢谢阅读!
Java RuntimeException异常处理汇总的更多相关文章
- RuntimeException异常处理汇总
Java中所有异常的父类是Throwable类,在Throwable类下有两大子类: 一个是Error类,指系统错误异常,例如:VirtualMachineError 虚拟机错误,ThreadDeat ...
- Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)
Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)
- Java常用英语汇总(面试必备)
Java常用英语汇总(面试必备) abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存 ...
- Java的异常处理
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.JB的在线帮助中对这几个关键字是这样解释的: Throws: Lists the ...
- 史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
- java的异常处理机制(try…catch…finally)
1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...
- java的异常处理简介
异常概述 任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界,要读写的文件不存在等等. 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生. 对于这些错误,一 ...
- 关于JAVA中异常处理的简单阐释.
---恢复内容开始--- 这是我的一篇要在博客园发布的随笔,主要是简单的概括一下我本次所学的关于异常处理的知识.有讲的不妥当的地方,或者有需要补充的,还请各位高人给指点,共同学习,虚心求学.谢谢啦~ ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
随机推荐
- ASP.NET MVC 4+ T.JPager使用
一.同步Link模式 var pagecount = TCalcPager.CalcPageCount(count, pageSize); var page = new TBuilderLinkPag ...
- 深入Spring IOC源码之ResourceLoader
在<深入Spring IOC源码之Resource>中已经详细介绍了Spring中Resource的抽象,Resource接口有很多实现类,我们当然可以使用各自的构造函数创建符合需求的Re ...
- F5负载均衡的初识和基本配置
目前全球范围内应用比较广泛的负载均衡设备为美国的F5.F5于2000年底进驻中国,在国内业界,F5负载均衡产品已经成为了主流负载均衡技术的代名词.下面我们对F5负载均衡设备做一个基本介绍,方便大家去认 ...
- html页面 代码 编写的 一些 基本素养 约定 知识点
hmtl代码书写也要养成一段一段的 区块代码, 每个区块代码 进行 html的 功能注释 自由文字的获得: (lorem ipsum: 乱数假文, 哑元文字) lorem ipsum: lipsum等 ...
- shell学习之路:流程控制(while)
while循环: 介绍:while循环是不定循环,也称作条件循环.只要条件判断成立,循环就会一直继续执行,直到条件判断不成立,循环才会停止,这就是和for的固定循环不太一样了. while [ 条件判 ...
- HITtrainning20140417题解
题目列表: ID Origin Title 10 / 15 Problem A FZU 2152 文件系统 0 / 16 Problem B FZU 2153 A simple geome ...
- 深入分析,理解jQuery.Deferred源码
前言: 如果你对jQuery.Callback回调对象不了解,或者只掌握其方法,但是没有通过阅读源码理解,可以先阅读 前一章jQuery.Callbacks源码解读二,因为只有完全理解jQuery.C ...
- python 100例 (持续更新)
1.题目:列表转换为字典. 程序源代码: 1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 4 i = ['a', 'b'] 5 l = [1, ...
- 懒加载的用处和赋nil操作[iOS开发教程]
懒加载的用处和赋nil操作 1:数据,清空操作: self.array = nil; 2:归档从新从本地获取数据 self.archive = nil; ##id = nil的用处 block当参数, ...
- Excel 使用CHIINV函数和GAMMA.DIST函数绘制卡方分布
1.使用CHIINV(概率,自由度),在Excel中绘制卡方分布. 若n个独立的随机变量均服从标准正态分布,则这n个随机变量的平方和构成一新的随机变量,其分布规律称为服从自由度为ν 的χ2分布. 2. ...