java异常是什么及其捕捉与处理

 目录

一:如果出现多个函数层层使用,然后exception(也就是异常)出现在最后那个被调用的函数里,那么最后那个函数怎么一步步把异常反馈回来

二:throw(意思是抛出去)的介绍与用法

三:try-catch-finally的介绍

四:异常的对象的简单用法(在Java里,异常以类的形式存在(不是抽象类,这个我们下次聊吧,今天先不聊了),那么它自然可以创造对象,如ArrayIndexOutOfBoundsException e,e就是数组下标越界这个异常的对象)

内容

以下是代码及介绍

package exception异常;

public class 异常3 {
	
	public static void f()
	{
		int[] a=new int[10];
		a[10]=10;
		System.out.println("hello");//hello并不输出,可见第七行异常后
		//f()函数剩下的内容就不执行了
	}
	
	public static void g()
	{
		f();
	}
	public static void h()
	{
		int i=10;
		if(i<100)
		{
			g();//退到外层指的是g()上下那两个括号外
		}
		
	}
	public static void k()
	{
		try {
			
			h();
			
		} catch (ArrayIndexOutOfBoundsException e) {
		
			System.out.println("kk");
			
			System.err.println("an exception was thrown");
			throw e;//加入throw语句,意思是将异常抛出,不在这里处理,如果没有加throw(下面接)
			//那么异常就被处理完了,main函数里的try-catch自然就不会不会输出相应语句,因为异常已经被处理
		}
		
		
		
	}
	
	
	
	
    public static void main(String[] args) {
		
		try {
			k();
			
		} catch (NullPointerException e) {
			
			System.out.println("空指针异常");
		}catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组越界异常");//是什么异常被catch捕获,就执行该catch里的语句
			//可以对e(它是一个对象来着的)进行以下操作
			System.out.println(e.getMessage());//输出异常信息
			System.out.println(e);
			e.printStackTrace();//追踪异常发生在哪
			
		}finally {
			System.out.println("都要执行");//不管try里面是否异常存在,finally里的语句都要执行哦
		}
		
		System.out.println("仍然执行");
		
	}
	
	
	

}

 一:这是返回异常的顺序图:

注意,退出最外层是说例如h()调用g(),注意看g()上下还有一层大括号,退到这个大括号外才能说你所处的是函数,然后才能继续按流程走哦

 二:而加入throw语句,意思是将异常抛出,不在这里处理,如果没有加throw,
 那么异常就被处理完了,main函数里的try-catch自然就不会不会输出相应语句,因为异常已经被处理

三:而在catch语句的后面,可以添加一个finally语句,不管try里面是否异常存在,finally里的语句都要执行哦,就算异常存在且被catch语句捕捉并处理了,finally里的语句也要执行哦

四:如上文代码所示

System.out.println(e.getMessage());//输出异常信息
			
			e.printStackTrace();//追踪异常发生在哪

这里我们重点聊追踪异常的发生,以下是printStackTrace()函数的输出结果

 它告诉我们,首先52行那里有异常,事实上,52行那里是对k()函数的使用(代码显示不出行数,抱歉哦),然后我们继续推进,31那里有异常,而31行是k()函数里有对h()函数的引用,以此类推,找到了最终出问题的f()函数里的8行。

结语:今天就到这里吧,一个人只有在他努力使自己升华时,才成为真正的人,欢迎评论区留言加关注哦,有关必互呢,书上说,天下没有不散的宴席。不要怕,书上还说了,人生何处不相逢。与君共勉

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

76博ding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值