admin管理员组文章数量:1794759
异常
一、异常
我们在程序书写过程中,或多或少有考虑不到的地方,这些我们没考虑到的东西叫做异常
异常:Exception:在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,我们称之为发生异常。
二、解决异常
If---else
if-else方法是最简单,最基础的方法,但它存在许多问题
用if-else堵漏洞的缺点:
(1)代码臃肿,业务代码和处理异常的代码混在一起。
(2)可读性差
(3)程序员需要花费大量的经历来维护这个漏洞
(4)程序员很难堵住所有的漏洞。
1、三连之一二 try--catch
(1)try-catch处理
基于if-else处理异常缺点太多,所以java中专门出了一个异常处理机制try--catch
原理:把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后:执行catch后面的{}里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。
PS:catch()括号里写接收错误的类型
public class Test2 {public static void main(String[] args) {//实现一个功能:键盘录入两个数,求商:try{Scanner sc = new Scanner(System.in);System.out.println("请录入第一个数:");int num1 = sc.nextInt();System.out.println("请录入第二个数:");int num2 = sc.nextInt();System.out.println("商:"+num1/num2);}catch(Exception ex){System.out.println("对不起,程序出现异常!");}System.out.println("----谢谢你使用计算器111");System.out.println("----谢谢你使用计算器222");System.out.println("----谢谢你使用计算器333");System.out.println("----谢谢你使用计算器444");System.out.println("----谢谢你使用计算器555");System.out.println("----谢谢你使用计算器666");}
}
详细说一下:
(1)try中没有异常,catch中代码不执行。
(2)try中有异常,catch进行捕获:
如果catch中异常类型和你出的异常类型匹配的话:走catch中的代码--》进行捕获
如果catch中异常类型和你出的异常类型不匹配的话:不走catch中的代码--》没有捕获成功,程序相当于遇 到异常了,中断了,后续代码不执行(catch中的异常类型就是括号中的内容)
注意:
(1)try中如果出现异常,然后用catch捕获成功的话,那么try中后续的代码是不会执行的。
(2)如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行没有影响。
(2)catch中如何处理
1、什么都不写,什么都不做
2、System.out.println("对不起,你的代码出现异常!");
3、打印异常信息:分3小点
(1)调用toString方法,显示异常的类命(全限定路径)
System.out.println(ex);
System.out.println(ex.toString());
(2)显示异常描述信息对应的字符串,如果没有就显示null
(3)输出终端:显示异常的堆栈信息:将异常捕获以后,在控制台将异常的效果给我们展示 出来,方便我 们查看异常-------------------------程序员首选
ex.printStackTrace();
4、抛出异常:
throw ex;
catch (Exception ex){//第一种处理:什么都不写,什么都不做//第二种处理;//System.out.println("对不起,你的代码出现异常!");//第三种处理:打印异常信息:/*(1)调用toString方法,显示异常的类命(全限定路径)System.out.println(ex);System.out.println(ex.toString());*//* (2)显示异常描述信息对应的字符串,如果没有就显示nullSystem.out.println(ex.getMessage());*///《程序员首选》 (3)显示异常的堆栈信息:将异常捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常/*ex.printStackTrace();*///第四种处理:抛出异常://throw ex;}
2、三连之三 finally
finally就是保障代码执行的保护块,在finally中的代码会被执行
(1)提出问题:
【1】在什么情况下,try-catch后面的代码不执行?
1、throw抛出异常的情况
2、catch中没有正常的进行异常捕获
3、在try中遇到return
【2】怎么样才可以将 try-catch后面的代码 必须执行?
只要将必须执行的代码放入finally中,那么这个代码无论如何一定执行。
【3】return和finally执行顺序?
先执行finally最后执行return
【4】什么代码会放在finally中呢?
关闭数据库资源,关闭IO流资源,关闭socket资源。(仅了解随后会学)
【5】有一句话代码很厉害,它可以让finally中代码不执行!
System.exit(0);//终止当前的虚拟机执行
具体代码:
public class Test2 {public static void main(String[] args) {try{Scanner sc = new Scanner(System.in);System.out.println("请从键盘录入第一个数:");int num1 = sc.nextInt();System.out.println("请从键盘录入第二个数:");int num2 = sc.nextInt();System.out.println("商:" + num1 / num2);System.exit(0);//终止当前的虚拟机执行return;}catch (InputMismatchException ex){System.out.println("您输入的不是int类型的数据");}catch (ArithmeticException ex){System.out.println("您输入的除数不可以为零");}finally {System.out.println("谢谢你使用母佳宇牌代码哦111");}}}
3、三连之终章 多重catch
在1、三连之一二try---catch------(1)try---catch处理红字ps部分提到
catch()括号里写接收错误的类型
多重catch就是改变括号内的错误类型,将他们细化,使输出端更加美观
(1)try中出现异常以后,将异常类型跟catch后面的类型依次比较,按照代码的顺序进行比对,执行第一个与 异常类型匹配的catch语句
(2)一旦执行其中一条catch语句之后,后面的catch语句就会被忽略了!
(3)在安排catch语句的顺序的时候,一般会将特殊异常放在前面(并列),一般化的异常放在后面。先写子类异常,再写父类异常。
(4)在JDK1.7以后,异常新处理方式:可以并列用 | 符号连接
本文标签: 异常
版权声明:本文标题:异常 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1700107038a400440.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论