java异常处理的两种方式:声明抛出和捕获处理(举例解释)

异常处理有两种方式:声明抛出处理程序捕获处理

声明抛出又分为 显式声明抛出隐式声明抛出

程序捕获处理又分为 嵌套捕获非嵌套捕获

隐式声明抛出异常

  1. 异常类型是RuntimeException类或是其子类,运行时异常,编译可通过
  2. 此类异常可以不做任何声明和处理,直接交给调用该方法的地方处理

例如:main方法中出现除零异常,但是main方法没有任何声明和处理,那么该异常直接交给调用main方法的Java虚拟机去处理

import java.util.*
class Example{
	public static void main(String[] args){
		int a, b, c;
		a = 67;
		b = 0;
		c = a / b;
		System.out.println(c);
	}
}

显式声明抛出

  1. 如果方法中出现异常,但是该方法不负责处理该异常,那么该方法应该显式声明异常,由调用该方法的地方去处理异常
  2. 当子类覆盖父类方法时,子类方法抛出的异常应与父类抛出的异常相同或是其子类,不能时其父类(儿子始终小于等于爹)

例如:当进行文件操作时,可能会出现文件找不到的异常,main方法不予处理,抛给调用main方法的JVM默认处理

import java.io.File;
import java.io.IOException;

public class JavaOpenFile {
    public static void main(String[] args) throws IOException {
        File file = new File("./congming.txt"); // "./congming.txt"默认在当前根目录下创建文件
        if (file.exists()){
            System.out.println("文件已经存在");
        }else{
            file.createNewFile();//如果文件不存在,需要创建
            System.out.println("文件创建成功");
        }
    }
}

非嵌套捕获

不存在多重try捕获

例如:

import java.util.*
class Example{
	public static void main(String[] args){
		try{
			int a, b, c;
			a = 67;
			b = 0;
			c = a / b;
			System.out.println(a);
		}catch(Exception e){
			e.printStackTraace();
		}
	}
}

嵌套捕获

例如:将所有代码放在一个try语句块中,若有一句代码出现异常,程序会运行catch部分,剩余代码无法被执行,因此需要进行嵌套捕获

例如:上面的非嵌套捕获,当执行到c = a / b 时会产生异常对象,执行e.printStackTrace,则无法输出a,要想继续执行以下操作应该嵌套

import java.util.*
class Example{
	public static void main(String[] args){
		try{
			int a, b, c;
			a = 67;
			b = 0;
			try{
				c = a / b;
			}catch(Exception e){
				e.printStackTraace();
			}
			System.out.println(a); //catch结束后仍可以被执行
		}catch(Exception e){
			e.printStackTraace();
		}
	}
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只可爱的小猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值