异常
程序中不正常的情况分为两大类:错误(Error)和异常(Exception)
错误(Error):程序本身无法对这种不正常的情况进行处理,将会导致程序崩溃;
例如:内存耗尽错误,JVM崩溃错误等
异常(Exception):程序可以特殊的代码,对不正常的情况进行捕获和处理,程序可以继续运行;
例如:除零异常,空指针异常,数组下标越界异常
捕获异常
语法格式1:
try{
//可能出现异常的代码
}catch(异常类 变量名){
//出现异常后的处理代码
//printStackTrace();方法会输出栈内存中的异常信息
变量名. printStackTrace();
}
语法格式2:
try{
//可能出现异常的代码
}finally{
//finally块:一般释放资源的语句,比如关闭流,关闭数据库的连接
}
finally:不管try中的代码是否出现异常,都会执行finally块中的代码
语法格式3:
try{
}catch(异常类 变量名){
}finally{
//即使try块或catch块中出现return语句,finally块中依然会执行
//如果在try块或catch块中出现System.exit(int);语句,finally块将无法执行
}
多重catch块:多重catch块中的异常类,一定是从小到大排列,兄弟异常类不分顺序
try{
}catch(子异常类 变量名){
}catch(子异常类 变量名){
}catch(父异常类 变量名){
}...[finally{}]
try、catch和finally都不能单独存在,但是try和catch 、 try和finally 可以在一起使用,catch和finally不能单独在一起使用
声明异常
语法格式:[访问修饰符] 返回值类型 方法名() throws 异常类{}
抛出异常
语法格式:throw 异常对象;
实例:
package exception;
/**
* 演示异常的声明和抛出
*
* @author 学霸联盟 - 赵灿
*/
public class ExceptionDemo {
//声明方法m1,并声明该方法会出现一个RuntimeException类型的异常
public void m1() throws RuntimeException {
/*
* 抛出一个RuntimeException类型的异常,没有使用try-catch捕获
* 使用声明异常的方式,将此处抛出的异常交给调用者m2处理
* 声明异常的类型,必须是抛出异常类型或其父类型
*/
throw new RuntimeException();
}
//声明方法m2,并声明该方法会出现一个Exception类型的异常
public void m2() throws Exception {
try {
// 调用声明了RuntimeException异常的方法m1
// 并使用try-catch处理m1中抛出的异常
m1();
/*
因为catch块是按照异常类型匹配捕获的,而方法m1声明的是RuntimeException;所以catch的小括号中只能声明RuntimeException或RuntimeException父类型的变量不能声明RuntimeException的子类变量,因为这样不能保证异常被捕获
*/
} catch (Exception ex) {
// 此处抛出了一个Exception类型的异常
// 没有使用try-catch进行捕获处理,所以该方法也必须声明异常
throw new Exception();
} finally {
/*
* 不管try和catch块中的代码是否抛出异常,finally块中的代码都会执行
* 即使try或catch块中执行了return语句,finally块中的代码也会执行
* 除非try或catch块中执行了System.exit(int);
* 或出现错误导致JVM崩溃,finally将不再执行
*/
}
}
// 方法m3
public void m3() {
try {
/*
* 调用声明了Exception异常的方法m2,而m3没有声明异常,
* 所以必须使用try-catch块处理方法m2产生的异常
*/
m2();
} catch (Exception ex) {
/*
* 抛出Exception类型的异常,而且没有使用try-catch进行捕获,也没有声明异常;
* 但是在finally块中使用的return语句,所以代码可以正常编译和执行
*/
throw new Exception();
} finally {
/*
* finally块中使用了return语句;
* 会将catch块中抛出的Exception类型的异常覆盖;
* 所以该方法可以既不声明异常,也不使用try-catch处理catch块中抛出的异常;
* 一般不建议这样使用
*/
return;
}
}
public static void main(String[] args) {
ExceptionDemo t = new ExceptionDemo();
t.m1();
}
}
自定义异常
继承Exception或Exception的子类
实例:
/**
* 演示自定义异常类
* @author 学霸联盟 - 赵灿
*/
public class MyExceptionDemo extends Exception{
public static void main(String[] args) {
try {
throw new MyException();
} catch (MyException e) {
//调用printStackTrace方法
e.printStackTrace();
}
}
}
/**
* 创建自定义异常类MyException,继承Exception类或Exception的子类
* @author 学霸联盟 - 赵灿
*/
class MyException extends Exception{
/**
* 重写父类中的printStackTrace
*/
@Override
public void printStackTrace() {
System.out.println("恭喜你,中了我的自定义异常!");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
学霸教育网站整站源码说明:由sdcms管理系统制作模板而来,请尊重原创。 后台地址:http://你的域名/iszxwadmin/ 管理账号:admin 密码:admin 学霸教育网站整站源码介绍: 本程序适合个人门户站、学校管理...
奥拉夫·舍韦的这本《超级学霸》就是教你如何开出正确的药方,来根治“学习不好”的病。 舍韦本来是一名天资平平、成绩中下的普通挪威学生,因为掌握了正确的学习方法,从普通学生一跃变成了超级学霸,成功考取了...
明明白白学Java大学霸
学霸快查助手是一款记录学习过程中的知识点,学习时能够快速查阅的学习软件,可以随时随地记录知识点,随时随地的快速查阅知识点,学霸快查软件就是专为学霸而生,提高学习效率,有需要的赶快下载吧! 学霸快查...
系统集成项目管理工程师-学霸一本通
学霸脑图--理科
我的钢笔是“学霸”
学霸课堂是一款学生课堂学习软件。软件包含:幼儿启蒙教育、小学、初中、高中 全部基本课程,基本课程为人教版。 学霸课堂软件特点 1:名校名师课堂讲解,够生动够详细,学生易掌握学习要点。 2:学习内容全面,除了...
三、测 “测”诊断学习中存在的不足与弱项,夯实双基。提供学生应知应会的基础性训练题目,主要是跟踪检查、评测基础知识掌握的程度,还有哪些知识缺漏。学生做过这些题目后,FAQ自动记录学生学习的各种数据,通过...
二年级(下)语文学霸期末测评卷12套
学霸经验分享:高三政治学习心得.docx
dSploitzANTI渗透测试基础教程目录v3.0大学霸陆小马功钟浩.pdf
学霸经验分享:高三政治学习心得.pdf
学霸经验分享:高三政治学习心得.doc
学霸直男主题错题本.pdf
使用SolidWorks2018进行的100个.SLDPRT建模文件。适用于初学者的学习,可以详细查看每一步操作的细节。
一年高分过三科,中级会计学霸告诉你怎么学[001].pdf
名字:老虎福学霸神器(不是什么大软件,名字是因我个人所好取的) 功能:只有一个功能,就是在你学习的时间,无意间想刷刷空间,刷刷微博时,他提醒你,要好好学习。(功能单一,但很新颖,很实用) 声明:软件完全...
基于野火霸道STM32教程学习训练 基于野火霸道STM32教程学习训练