java中的异常介绍和应用

异常的概述

生活中的异常

异常的情况我们在生活中经常发生,比如我们上学,上班的在路上花费的时间是半个小时,但是因为车多,人多等等因素或导致无法按时到达,甚至还可能碰见车祸,这都是生活中的异常。

程序中的异常

我们在运行程序时,可能会出现错误,运行的程序的窗口会出现红字警告。那就是异常。比如这样:

syso(“%d/%d=%d”,mu1,mu2,num3);

我们如果给第二个赋值0,那么程序就会出现这样的异常:
java.lang.ArithmeticException:by/zero

而程序一旦出现异常,程序就会立即结束,不仅仅计算的语句不会执行,而且其他的语句也无法进行下去。那么如何处理这些异常操作呢?我们可以加入if-else操作。

if(nmu2==0{  syso("输入的数是0,程序退出");
system.exit(1);
}

但是通过if-else处理异常有以下的缺点:
代码臃肿;
程序员把相当多的精力放在处理异常的代码上,放在了赌漏洞上,减少了编写业务代码的时间,必然影响开发的效率;
很难将所有的异常都穷举出来,程序仍然不健壮;
异常代码和业务交织在一起,影响代码的可读性,加大了程序的维护的难度;

所以如果将堵漏洞的工作完全交给计算机处理,用户只关注与业务的代码的编写,对异常的处理只要用来调用相应的处理方式就好了。而java就是这么做到。

什么是异常?

异常就是在程序运行过程中所发生的的不正常的事件,所需要的文件找不到,网络连接不通或者中断,算术运算错误(如除0)。数组下标越界,装载了一个不存在的类,对null对象的操作。类型转化异常等。异常会中断正在运行的程序。

异常的处理

什么是异常的处理

java中关于异常的处理是通过五个关键字来实现的。try,catch,finally,throw,throws。下面依次进行介绍。

try—catch

对于异常的处理我们可以将异常代码放入try语句中。

int date=0;
		
		try {
			int num=5/date;
		} catch (Exception e) {

			e.printStackTrace();
		}

try-catch 程序块的执行流程比较简单,首先执行的是try语句中的语句,这时可能有下面3种情况:
1.如果try执行结束,不会发生异常,那么catch中的所有的语句都会被忽略。
2.如果try执行过程中遇到异常,并且这个异常和catch所声明的异常类型匹配,那么try剩下的代码将被忽略,而相应的catch块将会被执行。匹配是说catch中异常的类型和生成的异常一致或者是它的父类。
3.如果try执行过程中遇到异常,而catch并没有匹配的,则程序立刻退出。
异常中对异常信息的输出有两种方式:
printStackTrace和getMessage();第一种是输出堆栈信息,第二种是返回异常信息的描述字符串。

常见的异常:
exception 异常层次结构的根类
ArithmeticException 算术错误情况
ArrayIndexOutOfBoundsException 数组下标越界
NullPointexception 尝试访问Null数据
ClassNotFoundException 不能加载类

Try-catch-finally块

如果我们在运行的时候,无论是否发生异常都会提示程序结束,那应该怎么办呢?
加上一个finally快就可以很好的解决这个问题。同样这样快大致可以分成两种情况。
1.try正常执行结束,finally继续执行。
2.try执行过程碰到异常,无论是否能被catch匹配,都会执行finally块。
要注意,try-catch-fianlly块中try是必须的,而后面这两个是可选的,但是这两种必须至少拥有一个。== 特别要注意的是,即使try块和catch块中有return语句,finally块中的语句都会执行。发生的顺序是执行try或者catch中return语句之前的语句,执行finally语句,执行try或者catch中的return语句退出。==

多重Catch块

一段代码可能会引起多种类型的异常,这时,可以在一个try语句块后面跟多个catch语句块。分别处理不同的异常。但排列的顺序必须是从子类到父类,最后一个一般都是Exception类。因为所有的异常子类都继承exception类,所以如果将父类异常放到前面,那么所有的异常都将被捕获,后面catch块的子类异常将得不到被执行的机会。
在运行的时候,系统从上到下分贝对每个catch语句进行处理的异常类型进行检查,并执行第一个与异常匹配的catch的语句。执行第一个catch后,其他的都会被忽略。

声明异常——throws

对异常的处理我们可以进行两种方式。
try-catch捕获并处理异常。
通过throws继续声明异常。如果调用者不打算处理异常,则可以继续通过throws声明异常,让上一级调用者处理异常。main()方法声明的异常将有java虚拟机来处理。

public static void main(String[] args) throws Exception {

抛出异常

抛出异常-throw

在java语言中,还可以使用throw关键字来自行抛出异常。原因:由于当前的环境无法解决参数问题,因此在方法内通过throw抛出异常,把问题交给调用者去解决。

public static void main(String[] args) throws Exception {
		int date=0;
		
		if(date>0){
			System.out.println(date);
		}else{
			throw new Exception("date 必须大于0");
		}
		

	}

throw和throws的区别表现在以下3个方面:
1.作用的位置不同:throw 用于在程序中抛出异常;throws用于声明在该方法内抛出了异常。
2.使用的位置不同:throw位于方法体内部,可以作为单独的语句使用;throws必须跟在方法参数的后面,不能单独使用。
3.内容不同:throw抛出一个异常对象,而且只能是一个,throws后面跟异常类,而且还可以跟多个异常类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值