Java里面的异常
-
父类: Exception
-
异常分为两类:
-
编译时异常:没有继承RuntimeException的异常,直接继承于Exception,编译阶段就会错误提示(用来提示程序员)
-
运行时异常:RuntimeException本身和子类,编译阶段没有错误提示,运行时出现的
-
可以写多个catch,如果存在父子关系,父要写在最后面
在Java中,异常(Exception)是一种用于处理程序运行期间出现的错误或异常情况的机制。当程序发生无法预料的情况,如文件未找到、网络中断等,Java会抛出一个异常。
异常的作用
- 程序健壮性:通过异常处理,程序可以更加健壮,不会因为小的错误而导致整个程序崩溃。
- 错误处理:异常提供了一种结构化的方式来处理错误,而不是简单地使用条件语句或返回值来表示错误。
- 代码可读性:通过捕获和处理异常,可以将错误处理代码与正常业务逻辑代码分离,提高代码的可读性和可维护性。
如何使用异常
- 声明异常:在方法签名中使用
throws
关键字声明该方法可能会抛出的异常。
public void readFile(String filename) throws IOException {// ... 读取文件的代码 ...
}
- 抛出异常:在程序中使用
throw
关键字抛出异常。
if (file == null) {throw new NullPointerException("File is null");
}
- 捕获异常:使用
try-catch
块来捕获并处理异常。
try {// 可能会抛出异常的代码readFile("example.txt");
} catch (IOException e) {// 处理异常的代码e.printStackTrace();
}
- finally块:无论是否发生异常,
finally
块中的代码都会被执行。通常用于释放资源,如关闭文件或网络连接。
try {// ...
} catch (Exception e) {// ...
} finally {// 无论是否发生异常,这里的代码都会被执行
}
- 自定义异常:可以通过继承
Exception
或RuntimeException
类来创建自定义异常。
public class MyCustomException extends Exception {public MyCustomException(String message) {super(message);}
}
注意事项
- 避免空的catch块:空的catch块会捕获异常但不进行任何处理,这可能导致程序在运行时出现错误而不被察觉。
- 不要过度使用异常:异常处理应该用于处理异常情况,而不是用于控制程序流程。过度使用异常可能会导致代码难以理解和维护。
- 选择正确的异常类型:根据异常的性质和发生的原因选择合适的异常类型。不要随意使用
Exception
或RuntimeException
作为通用异常类型。 - 记录异常信息:在捕获异常时,最好记录异常的详细信息(如堆栈跟踪),以便后续分析和调试。
- 避免在finally块中抛出异常:如果在finally块中抛出异常,它会覆盖try或catch块中抛出的异常,这可能导致程序无法正确处理原始异常。如果需要在finally块中执行可能抛出异常的操作,请确保在finally块中捕获并处理这些异常。
例子
package com.mohuanan.unusual;public class Test01 {public static void main(String[] args) {double[] arr = new double[5];//好处是,不会停止jvm的运行try{//可能会出现异常的代码System.out.println(arr[10]);//如果出现了异常,java会new 一个异常的对象//拿着这个对象和catch里面的参数比较//如果时一样的 就表示该异常被成功捕获}catch(ArrayIndexOutOfBoundsException e){System.out.println("数组索引越界了");}}
}