异常处理机制
目录捕捉异常
try……catch来捕获错误
try {
String s = processFile(“C:\\test.txt”);
// ok:
} catch (FileNotFoundException e) {
// file not found:
} catch (SecurityException e) {
// no read permission:
} catch (IOException e) {
// io error:
} catch (Exception e) {
// other error:
}
- 这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。如果一个异常回到 main() 方法,并且 main() 也不处理,则程序运行终止
- 必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。 不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
多个catch和finally
public static void main(String[] args) {
try {
process1();
process2();
process3();
} catch (UnsupportedEncodingException e) {
System.out.println("Bad encoding");
} catch (IOException e) {
System.out.println("IO error");
} finally {
System.out.println("END");
}
}
抛出异常
在Java中,throw
和 throws
关键字都是与异常处理相关的,但它们的用法和目的不同:
throw
throw
关键字用于在代码中手动抛出一个异常。它可以用来抛出任何类型的Throwable
对象,包括Error
、Exception
及其子类。throw
后面通常跟一个异常对象,这个对象可以是Java内置的异常类型,也可以是用户自定义的异常类型。throw
可以在任何代码块中使用,包括try
、catch
或finally
块之外。
throws
throws
关键字用于在方法签名中声明该方法可能会抛出的异常类型。这相当于是一个“提前告知”,告诉调用者这个方法在执行过程中可能会抛出的异常类型。throws
后面跟着的是异常类型的列表,调用者需要处理这些异常,要么通过try-catch
块捕获它们,要么在调用该方法的其它方法的签名中继续使用throws
声明。throws
只能用于方法的声明中。
下面是 throw
和 throws
的使用示例:
public class ExceptionExample {
// 使用 throw 抛出一个异常
public static void checkValue(int value) throws Exception {
if (value < 0) {
throw new Exception("Negative value is not allowed.");
}
}
// 使用 throws 声明方法可能会抛出的异常
public static void main(String[] args) {
try {
checkValue(-1);
} catch (Exception e) {
System.out.println("Caught an exception: " + e.getMessage());
}
}
}
在这个示例中,checkValue
方法使用 throw
抛出了一个 Exception
对象,因为它检测到一个负值。同时,checkValue
方法的声明中使用了 throws
关键字来声明它可能会抛出 Exception
。
总结区别:
throw
是用来抛出一个异常实例。throws
是用来声明方法可能会抛出的异常类型。
异常的传播
public class Main {
public static void main(String[] args) {
try {
process1();
} catch (Exception e) {
e.printStackTrace();
}
}
static void process1() {
process2();
}
static void process2() {
Integer.parseInt(null); // 会抛出NumberFormatException
}
}
标签:Exception,处理,抛出,throw,catch,机制,异常,throws
From: https://www.cnblogs.com/luoyiwen123/p/18343338