Java基础(七)--Exception异常处理
发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决。
错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有可能发生的异常,才能保证程序的正常运行。而且
一旦程序出现异常,异常处理及日志能帮助我们定位和解决异常。
概念:
Exception,是一种意外,不正常的现象。使用异常可以降低处理代码的复杂度,如果不适用异常,就必须通过判断去检查错误,而且可能在很
多地方都要判断,使用异常,只需要在一个地方处理错误,可以节省代码,能够把正常程序运行和异常分开。
异常分为Error和Exception,继承Throwable
1、Error:无法处理的异常,是一种错误,最常见的就是OutOfMemoryError,jvm直接停止运行
2、Exception:一般性的异常,只要能够捕捉处理,就能保证程序正常运行,比如NullPointerException、IndexOutOfBoundsException
Exception又分为:
1、运行时异常RuntimeException:
我们将RuntimeException或其他继承自RuntimeException的子类称为unchecked Exception。RuntimeException即使不编写异常处理的程序
代码,依然可以编译成功。这种异常在程序运行过程中可能出现,例如NullPointException、ClassCastException等
2、非运行时异常RuntimeException:
其他继承自Exception异常的子类称为checked Exception,编译器强制要求进行捕获处理,比如常见的IOExeption、SQLException,否则编
译无法通过
如何处理异常?
异常处理方式常用的有两种,分别如下:
1、try、catch、finally
public static void main(String[] args) {try { //要检查的程序语句int i = 3/0;System.out.println("test");}} catch (ArithmeticException e) {System.out.println("ArithmeticException");} catch (Exception e) { //异常发生时的处理语句System.out.println("Exception Message: " + e.getMessage());throw e;} finally { //肯定会执行的部分,无论是否发生异常System.out.println("finally Handler");}
}
结果:
ArithmeticException
finally Handler
总结:
1、finally、catch都是可以省略的
2、catch可以有多个,如果没有异常,不会执行,发生异常的话,按照顺序匹配,如果匹配,就不会与后面的catch块匹配
3、finally无论如何都会执行,即使之前有return语句。通常在finally进行资源释放的代码,或者lock的解锁,某些业务场景等
PS:不要在finally使用return,因为会覆盖之前的return语句,很容易造成混淆
相比throws更加灵活,更好的控制程序流程
2、throw、throws
public int add(int i) throws Exception {if (i == 0) {throw new IllegalArgumentException();}return 0;
}
throws:是把异常交给jvm进行处理,把异常往上层抛出,一旦发生最终的结果可能就会程序终止(如果上层方法不进行try catch),可以抛出
多个异常,一般需要在上层进行try catch块进行处理。
throw:用于主动抛出异常,throw关键字可以写在任何地方,通常和业务有关,通常这个异常时自定义和业务相关的Exception类
总结和建议:
1、父类或接口,对于子类是实现类的限制:
1.1).无论是继承还是实现,父类或者接口没有抛出异常,实现类或子类不能抛出异常
public class A {public void f1() {}
}
public class B extends A{@Overridepublic void f1() throws IOException{System.out.println("");}
}
1.2).父类或者接口抛出异常Exception1,实现类或子类可以是否抛出异常都可以,如果抛出Exception2,不能是Exception1的父类
public class A {public void f1() throws IOException{}
}
public class B extends A{@Overridepublic void f1() throws Exception{System.out.println("");}
}
1.3).父类的方法抛出异常只有非运行时异常(运行时异常),则子类在重写该方法的时候声明的异常也只能有非运行时异常(运行时异常),
不能含有运行时异常(非运行时异常)。
public class A {public void f1() throws IOException{}
}
public class B extends A{@Overridepublic void f1() throws IOException,ClassNotFoundException{System.out.println("");}
}
PS:类和接口在这方面的限制是相同的
2、throws一定是具体的Exception,而不是直接抛出Exception,否则上层必须也是抛出Exception,无法定位具体的异常
3、多catch块的异常,一定是小异常在前面,否则可能永远无法捕捉到
4、谨慎使用异常,因为会影响程序性能,能用判断解决还是要判断的
5、不要使用空的catch块
6、异常处理尽量抛到最上层进行统一处理
内容参考:Java异常处理和设计和《Java异常处理》
转载于:https://www.cnblogs.com/huigelaile/p/11015151.html
Java基础(七)--Exception异常处理相关推荐
- JAVA基础七 类和对象
文章目录 JAVA基础七 类和对象 01 引用 02 继承 03 方法重载 04 构造方法 05 this 06 传参 07 包 08 访问修饰符 09 类属性 10 类方法 11 属性初始化 12 ...
- Java基础篇:异常处理
文章目录 异常概述与异常体系结构 常见异常 异常处理机制 异常处理机制一:try-catch-finally 异常处理机制二:throws 手动抛出异常:thow 如何自定义一个异常类? 总结 异常概 ...
- java基础(七) 深入解析java四种访问权限
戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4 ...
- 【Java基础知识】 异常处理机制
"欲渡黄河冰塞川,将登太行雪满山." 系统运行,风云不测,睹始知终,秋去冬来,一叶落而知秋. 1. 什么是异常? 所有使我们程序提前终止,或者没有向预想方向去执行的错误统称为异常. ...
- java基础学习总结——异常处理
概述 顾名思义,通俗来讲异常就是指,那些发生在我们原本考虑和设定的计划之外的意外情况. 生活中总是会存在各种突发情况,如果没有做好准备,就让人措手不及. 你和朋友约好了明天一起去登山,半道上忽然乌云蔽 ...
- 复习java基础第二天(异常处理)
一.常见的异常类型: public class TestException {public static void main(String[] args) {int i = 10;//数学异常: ja ...
- [java基础问题] Exception 和 Error
Exception 和 Error Exception 和 Error 都是继承了 Throwable 类, 在 java 中, 只有继承了 Throwable 类才可以使用 throw 抛出, 或者 ...
- Java基础(七): instanceof用法详解
1.instanceof说明 instanceof 是 Java 的保留关键字. 作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型. instanceof是Java中的 ...
- java基础(七) java四种访问权限
###引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. ###一.访问权限简介 访问权限 ...
最新文章
- leetcode 10、Regular Expression Matching
- 业务总结001:优惠券与礼包活动
- 服务器开发中网络数据分析与故障排查经验
- MyEclipse6.5安装SVN插件的方法--在线安装
- CSS-伪类选择器(未完待续。。。)
- img标签显示不出图片_前端开发,原生 JS 实现最简单的图片懒加载
- 洛谷 P1168 中位数(优先队列)
- Atitit 图像处理 调用opencv 通过java api attilax总结
- access建立er图_关于ER图的快速生成 | 学步园
- ES RestClient查询文档
- android开发经典实战!来自阿里巴巴佛系安卓程序员的指南,专题解析
- 【阿里云】短视频SDK产品
- js 数组遍历时删除元素方法总结
- 渗透测试之文件上传漏洞
- identifier of an instance of
- 【GANs】Deep Convolution Generative Adversarial Network
- 《花开半夏》--4 生死之间的吻(1)
- Android(三)原生开发基本知识
- Windows Vista With Service Pack 2(x86 / x64)官方简体中文版(ISO)光盘镜像
- L3MON搭建(基于云端的远程安卓管理套件)