(1)异常
1> 程序中的异常
在Java语言中,异常是指程序在运行期间发生的事件,是导致程序中断运行的正常指令流,例如,在算术运算中除数为0、数组越界、空指针异常等,这些事件的发生都会阻止程序的正常运行。
程序中异常示例:
public class MatchCalc {
public static int division(int dividend,int divisor) {
return dividend/divisor;
}
public static void main(String[] args) {
System.out.println(MatchCalc.division(100,0));
}
}
运行结果如下:
上述程序在编译时没有任何异常,但是当运行“dividend/divisor”时,除数divisor值为0,就会产生异常,中断程序的运行,所以该语句后面的所有语句都不会再执行。
2>异常的分类
java中的异常按照类的层次结构进行组织,java专门设计一个Exception类来代表异常,Exception类继承自Throwable,Exception类的子类分别表示不同类型的异常。Throwable类位于异常类层次结构的顶端,它是java中所有错误和异常的父类。Error类代表java中的错误,Exception代表java中的异常。
2.1 Error错误
通常指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常程序无法处理这些错误。例如,现实施工中因地震而导致楼房坍塌,即类似于程序中发生了一个Error类型的异常。
2.2 Exception异常
该类型的异常在程序中发生后可以进行捕获处理,处理后程序正常运行,从而保证程序的稳定性及健壮性。java程序开发中的异常处理,主要是针对Exception类及其子类进行的。
程序中异常示例:
public class RuneException {
public static void showRuntimeException() {
int[]data=new int[2];
System.out.println(data[2]);
}
public static void main(String[] args) {
RuneException RunException = null;
RunException.showRuntimeException();
}
}
代码如下:
(2)try-catch处理异常
java的异常处理机制可以保障程序具有较好的容错性,使程序健壮性更高。当程序运行出现意外情形时,系统会自动生成一个Exception类型的子类对象来通知程序,从而实现业务功能的代码与错误处理代码分离,使程序具有更好的可读性。
java的异常处理机制提供了两种方式来处理异常:一种是使用“try-catch”语句处理异常,另一种是在方法声明时使用throws关键字将异常抛出。
1>使用try-catch捕获异常
java将可能出现的异常语句编写在try语句块中,所有的异常处理则放在catch语句中进行处理,其语法如下:
try{
//可能出现的异常语句
}catch(异常类型1 异常对象1){
//对异常的处理
}
2>使用finally回收资源
当程序在try代码块中使用java程序中,打开了一些物理资源,如数据库连接、网络连接或磁盘文件等,这些物理资源都必须通过程序显示回收,为了保证一定能够回收try语句块中打开的物理资源,异常处理机制提供了finally语句块。无论try语句块中的代码是否出现异常,try语句块对应的任意一个catch语句块是否被执行,甚至在try或catch语句块中执行了return语句,finally块总会被执行。完整的java异常处理语法结构如下:
try{
//代码
}catch(异常处理 异常对象){
//异常处理
}finally{
//资源回收代码
}
注意:
(1)可以使用多个catch语句块来捕获异常。
(2)try语句不能独立存在,其后至少要有一个catch语句块或finally语句块。
(3)finally语句块不是必须存在的,可以根据需求决定是否添加。
(3)throws与throws
1>使用throws声明抛出异常
当前方法不知道如何处理当前异常时,可以使用throws关键字声明抛出异常,该异常可由上一级调用者处理,throws声明只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。throws声明抛出的语法如下:
【访问控制符】返回类型 方法名称(参数列表)throws 异常类 1,异常类 2...{}
2>throw抛出异常
在实际的企业项目开发中,系统是否要抛出异常,可能需要根据应用的业务需求来决定,如果程序中的数据处理与指定的业务需求不符,这就是一种异常。如果需要在程序中自行抛出异常,则应该使用throw语句。throw语句抛出的不是一个异常类,而是一个异常实例,且每次只能抛出一个异常实例。
throw异常类对象:
throw异常类对象
(4)自定义异常
1>创建方式
java类库提供很多可以直接处理异常的类,但有时为了更加精准的捕获和处理异常来呈现更好的用户体验,则需要开发者自行定义异常,这种异常就是自定义异常。自定义异常类需要继承Exception类。
创建一个自定义异常类:
public class AuctionException extends Exception{
//无参构造方法
public AuctionException(){
}
public AuctionException(String message){
super(message);//调用父类有参构造器
}
}
2>自定义异常类的应用
当一个异常出现时,单靠某个方法无法完成处理该异常,必须由几个方法协作才可以完全处理该异常。当在异常出现的当前方法中,程序只对异常进行部分处理,还有一些处理需要在该方法的调用中完成,所以应该再次抛出异常,让该方法的调用者也能捕获到异常。
到底啦!