Java学习之异常

知识来源:

https://www.zhihuishu.com/portals_h5/2clearning.html#/course2cStudy/2014114?type=1&VNK=dee38fc6

https://www.bilibili.com/video/av795118111?p=1

    我们在编程过程中,会出现各种各样的错误,大体可以分为三类:编译错误,运行时错误和逻辑错误。其中编译错误在编译过程中IDE就能发现,逻辑错误程序本身无法解决,只有运行时错误是可以直接避免的。

    Java提供了Throwable类专门解决这类问题,Throwable下定义了两个子类Error和Exception,这篇文章主要讲解Exception相关的基础知识。首先要了解Error(错误)和Exception(异常)之间的区别,两者都指的是程序运行中出现的错误,导致程序无法继续运行,但Error指的是程序自身无法解决的问题,例如虚拟机错误、内存溢出等,这类问题一旦出现,整个程序往往直接崩溃或停止运行;但有些问题程序自身可以直接捕获到异常的发生,进而转入另一个分支,例如零指针异常,数组下标越界等异常。

   Exception下子类包括RuntimeException(运行时异常)、IOException(IO异常)、SQLException(SQL异常)等,你也可以自己继承Exception类编写自己的异常类,看以下程序:

public class test
{
	public static void main(String[] args)
	{
		division(1,0);
	}
	
	static void division(int a,int b)
	{
		System.out.print(a/b);
	}
}

   在这段代码中,我进行了1/0的操作,运行结果如下:

   这里程序自身进行了异常处理。第一行叫做抛出异常,抛出了异常类 java.lang.ArithmeticException,这里ArithmeticException代表算数异常,是RuntimeException的一个子类;后两行为捕获异常,程序自身指出异常发生的代码行数。

   遇到这种问题,我们可以采取两种方式,第一种,直接在division函数中添加判断语句,但是并不是所有异常都能这么简单的判断和解决,那么就可以利用程序自带的异常类,进行异常处理。

   异常处理有两种方法:

   1. try{...}catch{...}finally{...}语句

   其中try{...}中的代码块为可能发生异常的代码,catch{...}中的代码块为一旦出现异常后执行的代码,finally{...}中的代码块为不论出不出现异常,最终都要运行的代码。对之前代码作如下修改:

public class test
{
	public static void main(String[] args)
	{
		division(1,0);
	}
	
	static void division(int a,int b)
	{
		try
		{
			System.out.print(a/b);
		}
		catch(Exception e)
		{
			System.out.println("0不能作除数!");
		}
		finally
		{
			System.out.println("over!");
		}
	}
}

   运行结果如下:

   2. 将异常向上抛出

   通过在函数第一个大括号前添加throws Exception语句,将异常抛出到上一层函数中,再上一层函数中处理,也可以不断连续抛出,在main函数抛出后,会由程序直接处理,如最初的情况。

public class test
{
	public static void main(String[] args)
	{
		try
		{
			division(1,0);
		}
		catch(ArithmeticException e)
		{
			System.out.print("0不能作除数!");
		}
	}
	
	static void division(int a,int b) throws ArithmeticException
	{
			System.out.print(a/b);
	}
}

   运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值