如何认识Java异常处理?本作者解答一下

请浏览下文
在这里插入图片描述

什么是异常?

就是在编程过程中或者程序运行过程中出现的一些意外。

什么是异常处理?

就是提前编写程序处理可能发生的意外。

具体的过程是怎样的?

知己知彼方能百战百胜。Java中的异常是用对象来表示的,那么异常的对象从哪里来呢?异常主要有两个来源:

一是java运行时环境自动抛出的系统生成的异常,例如:除数是零的时候。

二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是java语言中定义的,使用throw关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。

异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。

知道了异常的来源,我们再来看一下,在java应用程序中处理异常时使用那些工具,是通过try 、catch、 throw、 throws、 finally这五个关键字来进行管理的。

好了 说的这里我们大体说一下这五个关键字都承担着什么样的责任。

try:是用来包住你认为有可能发生异常的一些语句,当这些语句出现异常时,这个异常将会被抛出。

Catch:它可以捕获到异常并做处理 ,一般接在try 语句块后面。

Throws :放在方法名的后面,声明该方法要抛出异常。

Throw:放在方法内部 抛出异常对象。

Finally:它的语句块会在方法执行 return 语句之前执行。

该做的一些铺垫基本说完了,让我们来了解一下 java 的异常处理机制吧。

Java虚拟机是用方法调用栈 来跟踪一系列的方法调用过程。该栈堆保存了每个方法的基本信息,当一个新的方法被

调用时,java虚拟机就把描述该方法的栈结构置入栈顶,位于栈顶的方法为正在执行的方法。看下面的图:
在这里插入图片描述
图中是main 方法调用 method B()方法,methodB()方法调用methodA()方法。具体的代码在下面

public class MethodInvocationStack {
 public static void main(String[] args) {
 MethodInvocationStack methd = new MethodInvocationStack();
 methd.methodB();
 }
 public void methodA() 
 {
 System.out.println("我是A");
 }
 public void methodB()
 {
 System.out.println("我是B");
 this.methodA();
 }
}

当methodA()被调用时会面临着两种情况,一是正常执行,二是出现异常。

当正常执行时,执行完毕后,java虚拟机会从调用栈中弹出该方法的栈结构,然后继续处理前一个方法。

当出现异常时,又会面临着两种情况:

一种是这种异常自己有能力处理,通过try-catch语句捕获并处理异常。代码如下:

public void methodA() 
{
 try {//举例一个算数错误
 int a = 1/0;
 } catch (ArithmeticException e) {
 System.out.println("除数不能为零");
 }
}

另一种是自己解决不了的,就需要通过throws语句声明抛出异常,让调用你的那个方法去解决

代码的样子如下:

public void methodA(int status) throws ArithmeticException
{
 if(status == -1)
 {
 throw new ArithmeticException();
 }
 
}
public void methodB()
{
 try {
 System.out.println("我是B");
 this.methodA(-1);
 } catch (ArithmeticException e) {
 // TODO Auto-generated catch block
 System.out.println("A发生了异常");
 }
}

代码中methodA()的问题自己解决不了,抛出让methodB()解决。同时本方法(methodA())的栈结构会在java虚拟机的调用栈中弹出,如果他也解决不了,以同样的方式继续向下,只不过methodB()的形式换成methodA()的形式。当java虚拟机追溯到调用栈的最底部的方法时,如果仍然没有找到处理该异常的代码块,将调用异常对象的printstacktrace()方法,打印异常信息,随后终止程序。

Java常用异常类
在这里插入图片描述
最后,感谢你读完了这篇文章!

我是小架,

我们下篇文章见|!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值