Java异常
在我们编程的过程中,经常会碰到异常。比如强制转换时,不对其进行说明,就会出现异常。
示例
public class Test {
public static void main(String[] args) {
int a = 128;
byte b = a;
System.out.println("b = " + b);
}
}
运行结果
程序异常一旦发生,程序中对其进行处理,那么整个程序就会停止运行,出现异常的语句的后面的语句将不会被执行。这样显然时不好的。因此,我们就可以通过一些异常处理语句来进行处理,让程序能够正常运行。一般处理异常的方法有两种:捕获和抛出。
异常的捕获与处理
异常的捕获与处理一般由 try-catch-finally 语句来实现。关于 try / catch 关键字的用法,之前的文章中就已经提到过了。传送门: try 和 catch 关键字
总结一下就是,我们可以将我们认为有可能有异常的语句放在 try 中尝试执行,如果语句有异常,则 try 中异常语句之后的所以语句都将不会被执行,转而执行 catch 中的语句;如果没有异常,就执行完 try 中的所有语句,而不去执行 catch 中的语句。不论是否有异常,只要有 finally 语句,都会执行 finally 语句。
异常的抛出
如果当前方法无法处理捕获的异常,就可以用 throws 声明将此异常抛出,交给上一个调用此方法的方法。如果还是无法处理,也可以继续抛出,直到将其处理或者最终交给JVM。而异常抛到JVM时,程序就会停止运行。
throws 关键字的用法: throws 异常类的类名
比如 private static void exceptionTest() throws Exception { }
当我们自己定义的异常需要抛出时,我们就必须使用 throw 关键字。throw 抛出的时异常对象而不是异常类,并且每次只能抛出一个异常对象。一旦 throw 语句被执行,其后的所有语句都不会被执行。
示例
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Test t = new Test();
Scanner in = new Scanner(System.in);
System.out.println("输入数字");
int num = in.nextInt();
try {
t.regist(num);
}
catch (RegisterException e) {
e.printStackTrace();
}
}
public void regist(int num) throws RegisterException {
if(num < 0)
throw new RegisterException("值为负值,不合理");
else
System.out.println("值为: " + num);
}
class RegisterException extends Exception {
public RegisterException() {
}
public RegisterException (String str) {
super(str);
}
}
}