java异常
来源:互联网 发布:故宫软件 编辑:程序博客网 时间:2024/05/17 16:56
在java中,异常并不只是错误,它其实是指一种不正常,不寻常的一种现象,这些现象并不一定会产生错误。
下面是java异常的类结构图:
如图中所示,java中的基本类是Object,所有异常类型都是内置类Throwable的子类。Throwable的直接子类有Error和Exception两个,以Error为父类所产生的下属类均为java虚拟机生成并抛出,这是我们无法处理的异常。而Exception类对象是由应用程序处理或抛出,该部分分为RuntimeException和非RuntimeException类异常,RuntimeException及其下属类的异常是运行时产生的异常情况,可处理也可不处理,但非RuntimeException的另一部分为编译时异常,该异常必须处理。
下面是几种常见异常情况:
如果抛出的异常是Error和RuntimeException类型之外的其他异常,就必须进行相关处理:
1.在相关的方法中提供所需代码来直接处理异常
2. 不去理会,在抛出异常代码的方法把这个异常向上抛出给该方法的调用代码。也就是说,自己不处理,将该异常的处理交给其他可处理程序进行处理。
异常实际上是由方法抛出的,异常处理的关键字位try,catch,finally。
try代码块:包含的是可能引起一个或者多个异常的代码。
catch代码块:包含着计划用于处理一个特定类型异常的代码。
finally代码块:在方法结束之前必需执行的代码。
当然在抛出异常时经常也用到throw和throws,throw是在catch块中,意思是将捕获的异常向上抛出,此时最常规,最规范的代码书写应该是throws在该异常代码的函数声明后面,并且抛出的异常类型一般不能变。而在外面如main中,我们进行捕获处理。这里要说明的一点是,如果有finally块,那么在执行throw之前,会先执行finally中的代码,再抛出异常。代码如下:
public class mytest{
public static void main(){
Test t1=new Test();
try{
t1.test1();
}catch(ArithmeticException e){
println("ArithmeticException error");
}
}
}
class Test{
public void Test1() throws ArithmeticException {
try{
system.out.println(10/0);
}catch(ArithmeticException e){
throw e;
}finally{
println("程序结束");
}
}
}
但在实际编码中,我们还可能遇到以下情况:
1. 在函数Test1的方法声明后面不加throws,方法体里依然throw,外部main中依然try,catch,这也是可以的,但条件是抛出的该异常为运行时异常,这时,我们可以在main中捕获或者不捕获异常。
2. 对于编译时异常,在函数Test1的方法声明后面不加throws,方法体里也没有throw,外部main中依然try,catch,这也是可以的。
3. 在编码时,异常的类型可以向上升高异常类型。
4. 在一些情况下,我们也可以catch一种异常,而抛出另一种异常。
- java 异常,java,异常
- Java 异常 异常链
- Java异常
- Java 异常
- JAVA 异常
- Java异常
- java 异常
- Java异常
- java异常
- Java异常
- java异常
- java异常
- java异常
- java 异常
- java异常
- java异常
- java异常
- Java异常
- 循序渐进学java 13种核心技术
- Leetcode 41. First Missing Positive
- vue.js基础
- 45. Jump Game II
- Linux下各个目录的功能
- java异常
- vim常用指令
- 安吉尔高额
- Leetcode 20. Valid Parentheses
- struts2的简单搭建
- java虚拟机学习笔记2_垃圾收集器
- Oracle之组合查询和in有关的优化
- 51nod1673 树有几多愁 【虚树+树形dp+状压dp】
- 激情彭拜的10月英语学习