java 捕捉的异常抛出_Java异常抛出和捕获

Java中把非正常情况分为两种,异常(Exception)和错误(Error)。

ffedd511e7a8

异常.png

Error:一般是指与虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获

Exception:强制性要求用户必须处理

RuntimeException:非检查异常,是Exception的子类,由用户选择是否进行处理

自定义异常:继承自Exception类,可以使用父类的大量的方法,也可自己编写方法来处理特定的事件。

自定义异常示例:

class MyException extends Exception {

public MyException(String message) {

super(message);

}

}

public class DefinedException {

public static void main(String[] args) {

try {

throw new MyException("\n自定义异常类!");

} catch(MyException e) {

System.out.println(e);

}

}

}

1、 异常抛出

1.1 throws关键字

使用throws将异常进行抛出,throws声明的方法表示该方法不处理异常,而由系统自动将所捕获的异常信息抛给上级调用方法。抛出的异常由上级调用者处理,上级调用者可以进行处理或抛出异常,上级调用者可以抛出更广泛的异常。

如果main方法也不知道如何处理异常就也可以使用throws抛出异常,那么该异常就会交给JVM处理。JVM将打印异常的跟踪栈信息,并中止程序运行。

示例

public class throwsDemo {

public static void main(String[] args) {

int[] a = new int[5];

try {

setZero(a,10);

} catch(ArrayIndexOutOfBoundsException ex) {

System.out.println("数组越界错误!");

System.out.println("异常:"+ex);

}

System.out.println("main()方法结束。");

}

private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {

a[index] = 0;

}

}

1.2 throw关键字

除了使用throws抛出异常外也可以使用throw自行抛出异常。throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。

示例

public class ExceptionDemo {

public static void main(String[] args) {

int[] a = new int[5];

try {

setZero(a,10);

} catch(ArrayIndexOutOfBoundsException e) {

System.out.println("异常:"+e);

}

System.out.println("main()方法结束!");

}

public static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {

System.out.println("setZero方法开始:");

try {

a[index] = 0;

} catch(ArrayIndexOutOfBoundsException ex) {

throw ex;

} finally {

System.out.println("setZero方法结束。");

}

}

}

对应抛出的异常实例,既可以显式捕获该异常,也可完全不理会该异常,把该异常交给该方法调用者处理。

2、 异常捕获

而对于Exception我们乐意使用try...catch进行捕获。try...catch不允许存在单独的try或者catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。

try...catch后可以添加finally,使用finally可以保证系统退出,finally块中代码绝对执行,捕获异常需要先补货小异常,否则小异常将无法被捕获。

示例

public class DealException {

public static void main(String args[]) {

try { //要检查的程序语句

int a[] = new int[5];

a[10] = 7;//出现异常

} catch(ArrayIndexOutOfBoundsException ex) {//异常发生时的处理语句

System.out.println("超出数组范围!");

ex.printStackTrace();//显示异常的堆栈跟踪信息

} catch(ArithmeticException ex) {//在异常捕捉的过程中要进行两个判断,第一是try程序块是否有异常产生,第二是产生的异常是否和catch()括号内想要捕捉的异常相同。

//可以在一个try语句后跟上多个异常处理catch语句,来处理多种不同类型的异常。

System.out.println("算术运算异常");

ex.printStackTrace();

} finally{ //这个代码块一定会被执行

System.out.println("*****");

}

System.out.println("异常处理结束!");

}

}

参考文档:

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

崔迪潇

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值