我是靠谱客的博主 笨笨奇异果,这篇文章主要介绍Java异常及异常处理机制,现在分享给大家,希望可以做个参考。

1.异常简介

(1)Java异常是Java提供的一种识别及响应错误的一致性机制。从面向对象的角度来说,异常也是一个对象。
(2)处理异常:

方式一:添加判断 if…else

缺点:程序员会把精力放在避免异常,无法集中在业务上了。一直在不漏洞,但是也不一定能补全
业务代码被处理异常的代码淹没了,可读性不强

方式二:异常处理机制: 预置一些异常处理程序—如果异常情况—执行相应的处理程序,这样就不会让程序中断
(3)异常处理机制

关键字作用
try用于监听
catch用于捕获异常
finallyfinally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)
throw用于抛出异常
throws用在方法签名中,用于声明该方法可能抛出的异常
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
例如: 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 语句

复制代码
1
2
3
4
5
6
7
8
9
10
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。 //否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }finally{ }

(2) finally语句

  • finally中的代码必须执行

在finally块中发生异常、程序所在线程死亡、在前面的代码中用了System.exit()、关闭cpu以上情形发生之一时finally语句将不会被执行

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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语法格式:
复制代码
1
2
3
[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{ }
复制代码
1
2
3
public void function() throws Exception{ }

3.自定义异常

  • 如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常。如果要自定义非检查异常,则扩展自RuntimeException。继承Exception还是继承RuntimeException是由异常本身的特点决定的,,而不是由是否是自定义的异常决定的。
  • 自定义的异常应该总是包含如下的构造函数:
    一个无参构造函数
    一个带有String参数的构造函数,并传递给父类的构造函数。
    一个带有String参数和Throwable参数,并都传递给父类构造函数
    一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
例如: 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异常及异常处理机制内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(141)

评论列表共有 0 条评论

立即
投稿
返回
顶部