java异常

一,概念

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

二,异常处理:

Java编程语言使用异常处理机制为程序提供了错误处理的能力

三,Java的异常处理是通过5个关键字来实现的:

1.try 执行可能产生异常的代码

2.catch 捕获异常

3.finally 无论是否发生异常,代码总能执行

4.throws 声明方法可能要抛出的各种异常

5.throw 手动抛出异常

四,try- catch块

第一种情况:try块中所有语句正常执行完毕,不会发生异常,那么catch块中的所有语句都会被忽略。

public void method(){
try {
  // 代码段(此处不会产生异常)
} catch (异常类型 ex) {
      // 对异常进行处理的代码段
}
 // 代码段
}

 第二种情况:try语句块在执行中遇到异常,那么在try块中其剩下的代码都将被忽略,系统会自动生成相应的异常对象,如果这个异常对象与catch中声明的异常类型相匹配,则相应的catch块将会被执行

public void method(){
try {
      // 代码段 1
      // 产生异常的代码段 2
      // 代码段 3
} catch (异常类型 ex) {
      // 对异常进行处理的代码段4
}
// 代码段5
}

第三种情况:try语句块在执行中遇到异常,如果这个异常与catch中声明的异常类型不匹配,程序会中断。

五,在catch块中处理异常

void printStackTrace()     输出异常的堆栈信息

String getMessage()       返回异常信息描述字符串,printStackTrace()输出信息的一部分

六,常见的异常类型

 七,多重catch块

一段代码可能会引发多种类型的异常,在上面计算并输出商的示例中,其实至少存在两种异常情况,输入非整数内容和除数为0,而我们统一按照Exception类型捕获。

如果要分别捕获,就可以使用多重catch块。

八:引发多种类型的异常

(1)排列catch 语句的顺序:先子类后父类

(2)发生异常时按顺序逐个匹配

(3)只执行第一个与异常类型匹配的catch语句

九,try-catch-finally

public void method(){
try {
     // 代码段 1
     // 产生异常的代码段 2
} catch (异常类型 ex) {
     // 对异常进行处理的代码段3
     return;
}finally{
      // 代码段 4
}
}

十,声明异常

 main方法声明的异常由Java虚拟机处理

十一,抛出异常 throw

除了系统自动抛出异常外,在编程过程中,我们往往遇到这样的情形:有些问题是系统无法自动发现并解决的,如年龄不在正常范围内、性别输入不是“男”或“女”等,此时需要程序员而不是系统来自行抛出异常,把问题提交给调用者去解决。

Java语言中通过关键字throw来自行抛出异常。

十二,自定义异常

JDK 中的异常类型不能满足程序的需要时,可以自定义异常类。

使用自定义异常的步骤:

十三,异常处理原则

异常处理与性能

异常只能用于非正常情况

不要将过于庞大的代码块放在try中

在catch中指定具体的异常类型

需要对捕获的异常做处理

十四,面试题:

1.try-catch块中存在return语句,是否还执行finally块,如果执行,说出执行顺序?

(1)不管有没有出现异常,finally块中代码都会执行;
(2)当try和catch中有return时,finally仍然会执行;
(3)finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
(4)finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

2.try-catch- finally块中, finally块唯一不执行的情况是什么?

答:关闭虚拟机

3.请说出throw和throws的区别?

(1)作用不同: throw用于在程序中抛出异常; throws用于声明在该方法内抛出了异常。

(2)使用的位置不同:throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表后面,不能单独使用。

(3)内容不同: throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。

4.Error与Exception的区别
答:都继承与Therowable这个类
Error是java程序在编译阶段出现的问题,代码将无法通过编译
Excepetion是java程序运行阶段是才出现的问题,能通过编译,但是不能完整运行

十五,总结

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值