您的位置:首页 > 编程语言 > Java开发

Java 异常

2019-04-25 20:04 113 查看

Java 异常

异常的引入:

在生活中:

小明放学回家

在学校(编译时期)

1.不要闯红灯

2.记得带伞

3.不要和陌生人说话

在路上(运行时期)

1.闯绿灯被撞了

2.碰瓷

3.被抢劫

4.地震 (Error)

到家里(执行结束)

异常的概念:

异常的本质就是Java当中对可能出现的问题进行描述的一种对象体现

异常的分类

异常: 凡是Excetption的子类都是异常

编译时异常: 在编译时期发生的异常,程序员可以处理,因为编译会报错,

Exception的子类但不是RuntimeException的子类

运行时异常: 在运行时期发生的异常,程序员也可以处理,一般都是代码的逻辑性不够严谨不够健壮,依赖的是程序员的经验

RuntimeException的子类都是运行时异常

严重错误: 在程序执行的整个阶段,都可发生错误,错误是无法解决的,可以避免 例如: StackOverflow

处理异常的目的

并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行

jvm默认是如何处理异常的?

1.打印错误信息

a.异常名称 java.lang.ArithmeticException

b.异常的消息 / by zero

c.异常所发生的方法位置 at com.sxt.exceptiondemo.ExceptionDemo.main

d.异常所在Java文件中 ExceptionDemo.java

e.异常发生行号 1

2.终止程序

System.exit(0);

JVM处理异常的方式不能够满足我们开发的需求,那么我们需要自己处理异常.

如何来处理异常?

方式一: try…catch…finally

方式二: throws

方式一处理异常:

异常处理的格式:

try{

//放置程序可能出现问题的代码

}catch(异常类 异常名){

//这里放置异常处理的代码

} finally{

//释放资源

}

注意:

1.try块的代码越少越好

2.try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行

3.多个catch块只会执行一个

4.Exception接受异常必须放在异常的最后面,满足先子类后父类

异常的执行流程:

1.程序执行到错误行,系统会创建一个异常对象,并且抛给我们

2.程序进入catch块进行逐个匹配

匹配成功,程序执行catch块代码

匹配失败,交给jvm处理

处理异常的标准方式:

1.能够显示处理的尽量显示处理,提高程序的可读性

2.但是一定要在异常处理的最后加上 父类Exception处理

1.打印错误信息

a.异常名称 java.lang.ArithmeticException

b.异常的消息 / by zero

c.异常所发生的方法位置 at com.sxt.exceptiondemo.ExceptionDemo.main

d.异常所在Java文件中 ExceptionDemo.java

e.异常发生行号 1

2.终止程序

System.exit(0);

处理编译时异常和运行时异常

编译时异常的处理: Ctrl + 1

运行时异常的处理: try…catch throws

有了try…catch处理异常,为什么还需要throws处理方式?

在某些情况下,我们不会处理异常,或者我们没有权限异常,干脆我就不想处理异常

在这种情况下我们可以抛出异常,在方法上抛出

谁调用我有问题的方法就谁处理

千万不要交给虚拟机处理

throws处理异常的格式

[修饰符] 返回值类型 方法名(参数列表) [throws 异常类1,异常类2…]{

}

有了throws为什么还需要throw?

格式:

throw 异常对象;

谁调用就将将对象抛给谁

当抛出的是编译时异常的时候,必须要在方法体上声明异常

当时运行时异常的时候,可以不用声明,但是建议声明

面试题:

throw和throws的区别

1.throws出现在方法的声明上,throw关键出现在方法内

2.throws表示一种异常的可能性,throw表示程序的必然性

3.throws可以声明多个异常类,throw只能够抛出一个异常

4.throws声明的是异常类,throw抛出的是异常对象

finally碰到return

finally一定会执行

执行顺序?

在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。它应该使用栈保存返回值。

自定义异常

异常的本质就是Java中对错误问题的描述的一种对象体现

Java提供的异常不够我们自己使用,我们需要自定义异常,自己应用在我们的开发中

自定义异常的步骤

1.创建一个异常类继承 Exception或者RuntimeException
2.在自定义异常类中书写构造方法即可

a.无参构造

b.带错误信息的构造方法

finally关键字

1.finally修饰代码块一定会被执行,除非碰到程序退出

2.一般用来释放内存资源,比如关闭IO流的输入输出对象,数据库连接对象等等…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: