概述
1.异常简介
(1)Java异常是Java提供的一种识别及响应错误的一致性机制。从面向对象的角度来说,异常也是一个对象。
(2)处理异常:
方式一:添加判断 if…else
缺点:程序员会把精力放在避免异常,无法集中在业务上了。一直在不漏洞,但是也不一定能补全
业务代码被处理异常的代码淹没了,可读性不强
方式二:异常处理机制: 预置一些异常处理程序—如果异常情况—执行相应的处理程序,这样就不会让程序中断
(3)异常处理机制
关键字 | 作用 |
---|---|
try | 用于监听 |
catch | 用于捕获异常 |
finally | finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件) |
throw | 用于抛出异常 |
throws | 用在方法签名中,用于声明该方法可能抛出的异常 |
例如:
try{
可能出现异常的代码
}catch(){
//异常出现的话,如何处理---异常处理程序
}catch(){
//异常出现的话,如何处理---异常处理程序
}
finally{
//不管是否出现异常,都会去执行的代码
//关闭资源 善后、收场
}
此结构中,try必选,catch和finaly可选,但是必有其一
正常情况:执行try,继续后续代码
异常情况:出现异常之后的代码不再执行,转到catch块执行,继续后续代码
出现异常,系统会产生一个异常对象,会和catch块中捕获的类型匹配
匹配上才执行其中的代码,匹配不上就报错
多种异常的话,我们可以使用多个catch语句来捕获。从上往下匹配,上面的匹配上,下面的就不再匹配 所以,catch种捕获的异常类型应该从小到大来写,否则会报错,因为有些catch块永远也执行不了
2.异常体系
1.Throwable
- Throwable 类是 Java 语言中所有错误或异常的超类。
Error与Exception的区别:
- Error类对象由 Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。
- Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。
2.异常处理机制
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
(1)try-catch 语句
try
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。
//否则不会执行catch里面的内容
}
catch
{ //除非try里面执行代码发生了异常,否则这里的代码不会执行
}finally{
}
(2) finally语句
- finally中的代码必须执行
在finally块中发生异常、程序所在线程死亡、在前面的代码中用了System.exit()、关闭cpu以上情形发生之一时finally语句将不会被执行
try
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。
//否则不会执行catch里面的内容
}
catch
{ //除非try里面执行代码发生了异常,否则这里的代码不会执行
}finally{
//不管什么情况都会执行,包括try catch 里面用了return
//可以理解为只要执行了try或者catch,就一定会执行 finally
}
(3)throw抛出异常
- Java中使用throw关键字抛出异常
- 定义:一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理
- throw:表示方法内抛出某种异常对象
如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错 - 执行到 throw 语句则后面的语句块不再执行
(4)throws语句
- throws是用来声明一个方法可能抛出的所有异常信息。
- throws对异常不处理,谁调用谁处理
- 如果是检查异常,那么调用者必须捕获或再次抛出
- 如果是非检查异常或者没有直接调用的地方,都是可以交给jvm来处理
- throws在使用时应处于方法签名之后使用,可以抛出多种异常并用英文字符逗号’,’隔开。
- thorws语法格式:
[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{
}
public void function() throws Exception{
}
3.自定义异常
- 如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常。如果要自定义非检查异常,则扩展自RuntimeException。继承Exception还是继承RuntimeException是由异常本身的特点决定的,,而不是由是否是自定义的异常决定的。
- 自定义的异常应该总是包含如下的构造函数:
一个无参构造函数
一个带有String参数的构造函数,并传递给父类的构造函数。
一个带有String参数和Throwable参数,并都传递给父类构造函数
一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
例如:
class WrongInputException extends Exception { // 自定义的类
WrongInputException(String s) {
super(s);
}
}
class Input {
void method() throws WrongInputException {
throw new WrongInputException("Wrong input"); // 抛出自定义的类
}
}
class TestInput {
public static void main(String[] args){
try {
new Input().method();
}
catch(WrongInputException wie) {
System.out.println(wie.getMessage());
}
}
}
以上代码运行输出结果为:
Wrong input
最后
以上就是笨笨奇异果为你收集整理的Java异常及异常处理机制的全部内容,希望文章能够帮你解决Java异常及异常处理机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复