Java中的异常是指程序中发生的错误,这些错误分为两种:一种是编译时异常,一种是运行时异常。在Java中,异常通过Exception类来处理。本文将详细介绍Java中异常Exception以及Java中如何捕获和处理异常,并提供两个示例帮助理解。
Exception类
Exception类是Java中所有异常类的基类,在Java中,异常类被组织成了一个继承体系,Exception类是这个继承体系的顶层类,在Exception类的下面分别有两个分支:RuntimeException和IOException。其中RuntimeException和其子类为运行时异常,IOException及其子类为编译时异常。
在Java中,如果没有做任何异常处理,程序会直接停止运行并输出错误信息。因此,很重要的一项任务是捕获和处理异常。
异常的捕获
捕获异常的语法:
try {
//代码块
} catch (ExceptionType e) {
//catch块
} finally {
//finally块
}
其中,try块中包含需要捕获异常的代码,catch块中处理捕获到的异常,finally块中的代码无论try块中是否抛出异常,都会被执行。
还可以使用多个catch块来捕获不同类型的异常,语法如下:
try {
//代码块
} catch (ExceptionType1 e1) {
//catch块
} catch (ExceptionType2 e2) {
//catch块
} finally {
//finally块
}
如果有多个catch块,程序将首先检查第一个catch块是否捕获到异常,如果没有,则会检查第二个catch块,以此类推。
自定义异常
除了从Exception类派生出新的异常类之外,Java还允许用户创建自己的异常类。自定义异常类需要继承Exception或其子类,并实现父类的构造方法。通常建议添加一个没有参数的构造方法,使异常类同样可以像其它Exception类一样使用.
自定义异常类的示例:
class MyException extends Exception{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
在上面的示例中,异常类MyException继承于Exception类,并实现了两个构造方法,使得可以自定义异常信息。
下面给出两个使用异常类的示例:
- 运行时异常的示例
public class NumberNullException extends RuntimeException{
public NumberNullException(String message){
super(message);
}
}
public class TestRunTimeException {
private static double divide(double a, double b){
if(b == 0.0){
throw new NumberNullException("The second value cannot be 0!");
}
return a / b;
}
public static void main(String[] args) {
try{
double result = divide(4.0, 0.0);
}catch(NumberNullException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
在上面的示例中,定义了一个叫做NumberNullException的自定义异常,该异常继承于RuntimeException类。在divide函数中,如果第二个参数b等于0,则会抛出数学异常。在主函数中,通过try-catch块来捕获该异常,并输出相应的错误信息。
- 编译时异常的示例
public class MyFileReader{
public String readFile(String fileName) throws IOException{
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while((line = bufferedReader.readLine()) != null){
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
bufferedReader.close();
return stringBuffer.toString();
}
public void writeFile(String data, String fileName) throws IOException{
FileWriter fileWriter = new FileWriter(fileName);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(data);
bufferedWriter.close();
fileWriter.close();
}
}
public class TestCompileTimeException {
public static void main(String[] args){
MyFileReader fileReader = new MyFileReader();
try {
String content = fileReader.readFile("example.txt");
fileReader.writeFile(content,"output.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的示例中,自定义了一个类叫做MyFileReader,在MyFileReader类中定义了读取和写入文件的方法。在main函数中,通过创建MyFileReader类的对象,调用该对象内的方法完成文件操作,我们对该操作进行了异常处理。在try块中,我们调用readFile方法并将返回值存入变量content,如果该方法的执行中有文件读取错误,则会抛出IOException异常,在catch块中,我们将该异常捕获并进行处理。
通过以上两个示例,我们可以更好地理解异常Exception和捕获以及自定义异常的相关知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中异常Exception和捕获以及自定义异常详解 - Python技术站