Java的异常
异常处理机制
-
抛出异常
-
捕获异常
异常处理五个关键字:try、catch、finally、throw、throws
try、catch、finally
快捷键,选中可能出现异常的部分,Ctrl + Alt + T。用try catch finally
1、try中是语句
2、catch是捕获的异常类型。捕获的时候,就像if elseif else if ... else一样,可以有选择的捕获
(需要注意:当需要捕获多个异常时,要从小往大捕)。
在多重catch块后,最好加一个catch(Exception)来处理可能被遗漏的异常。
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
int a = 3;
int b = 0;
try {
int c = a/b;
} catch (Error e) { //捕获Error
System.out.println("Error");
} catch (Exception e) { //捕获Exception
System.out.println("Exception");
} catch (Throwable t) { //捕获Throwable
System.out.println("Throwable");
} finally { //善后工作
System.out.println("finally");
}
}
}
输出:
Exception
throw、throws
这两个都是自己设定一种情况下,主动抛出异常
二者的区别:
1. throw: throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出特定类型的异常
2. throws:throws是方法可能抛出异常的声明,用在声明方法时,表示该方法可能抛出异常,然后交给上层调用它的方法处理
3. throw和throws区别:
throw出现在函数体,throws出现在方法函数头
throw是抛出了异常,执行throw则一定是抛出了某种异常,throws是表示出现异常的一种可能性,并不一定会抛出这些异常
1. throw
下面用throw抛出异常后,程序不会往下走。
即:new Application().test(1,0);这一句执行完,抛出异常,程序就停止了,下面语句 System.out.println("继续往下走");不再往下走。
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
new Application().test(1,0);
System.out.println("继续往下走");
}
public void test(int a, int b) {
if (b == 0) {
throw new ArithmeticException();
}
}
}
输出:
Exception in thread "main" java.lang.ArithmeticException
at com.WZ.Demo.Application.Application.test(Application.java:11)
at com.WZ.Demo.Application.Application.main(Application.java:6)
下面用throw抛出异常后,用try catch等捕获异常,然后程序继续往下走。
即:new Application().test(1,0);这一句执行完,抛出异常,捕获异常,程序不停止,下面语句 System.out.println("继续往下走");接着往下走。
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
try {
new Application().test(1,0);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("继续往下走");
}
public void test(int a, int b){
if (b == 0) {
throw new ArithmeticException();
}
}
}
输出:
Exception in thread "main" java.lang.ArithmeticException at com.WZ.Demo.Application.Application.test(Application.java:11) at com.WZ.Demo.Application.Application.main(Application.java:6)
2. throws
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
try {
new Application().test(1,0);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("继续往下走");
}
public void test(int a, int b) throws ArithmeticException{
if (b == 0) {
throw new ArithmeticException();
}
}
}
输出:
Exception in thread "main" java.lang.ArithmeticException at com.WZ.Demo.Application.Application.test(Application.java:11) at com.WZ.Demo.Application.Application.main(Application.java:6)
继续往下走