大家好,分享一下Java捕获和抛出异常
上代码:
package Exception;
public class Test {
public static void main(String[] args) {
//写一个程序来模拟异常
int a =1;
int b =0;
//定义变量并赋值
System.out.println(a/b); //被除数不可以为0,所以程序会有异常
}
}
看结果
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
下面,我们来捕获这个异常
package Exception;
public class Test {
public static void main(String[] args) {
//写一个程序来模拟异常
int a =1;
int b =0;
try { //try监控区域
//定义变量并赋值
System.out.println(a / b); //被除数不可以为0,所以程序会有异常
}catch (ArithmeticException e) { //catch捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally { //处理善后工作,可以不加这个
System.out.println("finally");
}
}
}
注意点:
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
看结果:
这样的话,是无法捕捉到异常
package Exception;
import struct.TestDemo01;
public class Test {
public static void main(String[] args) {
//写一个程序来模拟异常
int a =1;
int b =0;
try {
//定义变量并赋值
new Test().a();
// System.out.println(a / b); //被除数不可以为0,所以程序会有异常
}catch (ArithmeticException e) { //catch捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally { //处理善后工作
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
}
看运行结果
finally 照常执行
这是多重捕获语法格式:
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型3 异常的变量名3){
// 程序代码
}
这个要注意下面的要点:
上面的代码段包含了 3 个 catch块。
可以在 try 语句后面添加任意数量的 catch 块。
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。
代码实例
package Exception;
import struct.TestDemo01;
public class Test {
public static void main(String[] args) {
//捕获多个异常
int a =1;
int b =0;
try {
//定义变量并赋值
System.out.println(a / b); //被除数不可以为0,所以程序会有异常
}catch (ArithmeticException e) { //catch(想要捕获的异常类型)捕获异常
System.out.println("Error");
}catch (Exception e) {
System.out.println("Exception");
}catch ( Throwable t){
System.out.println("Throwable");
}finally { //处理善后工作
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
}
显示结果
再写一个
package Exception;
public class Test2 {
public static void main(String[] args) {
int a=1;
int b=0;
//Ctrl+Alt+T
try {
System.out.println(a/b); // //Ctrl+Alt+T 选择代码块
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
package Exception;
import struct.TestDemo01;
public class Test {
public static void main(String[] args) {
//捕获多个异常
int a =1;
int b =0;
try {
if (b==0){ //这个判断条件不符合逻辑 throw thr
throw new ArithmeticException(); //所以我们主动的抛出异常 throw throws
}
//定义变量并赋值
System.out.println(a/b); //被除数不可以为0,所以程序会有异常
}catch ( Exception e) { //catch(想要捕获的异常类型)捕获异常
System.out.println("Error");
// }catch (Exception e) {
System.out.println("Exception");
}catch ( Throwable t){
System.out.println("Throwable");
}finally { //处理善后工作
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
}
看代码
好了,关于Java捕获和抛出异常就讲到这里了,谢谢大家