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这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
随机推荐
- C# 常用分页
var num = TCalcPager.CalcPageCount(addList.Count, TDefautValue.PageSize); ; i < num; i++) { var r ...
- span设为inline-block之后,未包含文字时下面会多出一条空白问题
1.问题的引出: 产品列表页面场景: 上面是产品图片[img], 中间是提示库存信息[span](始终存在,有库存则不显示文字,但元素占位.所以设置display:inline-block), 下面是 ...
- TeX — Beauty and Fun
我是初学者,你推荐使用什么发行的 TeX? 我应该用 LaTeX 吗? 我认为最好的发行是 TeXLive CD,它不但包含了所有操作系统需要的程序,而且有许许多多宏包,如果你不是特别特殊的用户,有了 ...
- java.lang.reflect.Field
java.lang.reflect.Field 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 ...
- R 语言程序设计
Data The zip file containing the data can be downloaded here: specdata.zip [2.4MB] The zip file cont ...
- Unity3D
一.安装配置 1.下载页面:http://unity3d.com/get-unity 分个人版本和专业版,个人版免费,但少了很多功能(主要是渲染相关,具体请看官方说明), 专业版是每月 75$ 或一次 ...
- Win7与XP共享互相访问及共享注意事项!
win7共享方法和XP类似,主要需要检查以下操作: 1,首先将Guest账户打开 2,右击文件夹-属性-共享选项-高级共享 3,将共享文件√打上,应用-确定即可! 4,查看自己IP(开始-运行-cmd ...
- Thank you for your resubmission. Performance - 2.3.10 We noticed that your app or its metadata includes irrelevant third-party platform information. Specifically, Android logo is mentioned in the
被拒很多次,各种修改,最后发现是提交的时候,含有安卓的图标!欲哭无泪呀! Thank you for your resubmission. Performance - 2.3.10 We notice ...
- Mac Pro 安装 cmake,报错 Warning: cmake-3.5.2 already installed, it's just not linked
1.先安装 brew,参考文章:Mac Pro 安装 Homebrew 软件包管理工具 2.执行安装命令 brew install cmake 出现警告提示: Warning: cmake-3.5.2 ...
- shell简单使用
最近需要用到shell脚本实现关机保护作用,总结下语法 要点: 1.linux下编写的shell脚本不能在window下编写,否则会出现^M的错误,用window编写保存,在linux用vim打开,每 ...