try-catch-finally-throw-throws 异常处理 超、凢脫俗 2023-09-24 14:29 70阅读 0赞 #### 1.if-else解决异常 #### 用if-else堵漏洞的缺点: (1)代码臃肿,业务代码和处理异常的代码混在一起。 (2)可读性差 (3)程序员需要花费大量的经历来维护这个漏洞 (4)程序员很难堵住所有的漏洞。 代码: package com.msb.test01; import java.util.Scanner; /** * @Auther: msb-zhaoss */ public class Test { //这是一个main方法,是程序的入口: public static void main(String[] args) { //实现一个功能:键盘录入两个数,求商: Scanner sc = new Scanner(System.in); System.out.println("请录入第一个数:"); if(sc.hasNextInt()){ int num1 = sc.nextInt(); System.out.println("请录入第二个数:"); if(sc.hasNextInt()){ int num2 = sc.nextInt(); if(num2 == 0){ System.out.println("对不起,除数不能为0"); }else{ System.out.println("商:"+num1/num2); } }else{ System.out.println("对不起,你录入的不是int类型的数据!"); } }else{ System.out.println("对不起,你录入的不是int类型的数据!"); } } } #### 2. try-catch-finally #### 【1】基于if-else处理异常缺点太多,所以java中专门出了一个异常处理机制: “异常三连” try-catch-finally 【2】异常出现了以后怎么看: ![8c876ab2dc8d440398dee5613eb420e3.png][] 【3】捕获异常: try-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"); } } **原理**: 把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后:执行catch后面的\{\}里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。 详细说一下: (1)try中没有异常,catch中代码不执行。 (2)try中有异常,catch进行捕获: 如果catch中异常类型和你出的异常类型匹配的话:走catch中的代码--》进行捕获 如果catch中异常类型和你出的异常类型不匹配的话:不走catch中的代码--》没有捕获成功,程序相当于遇到异常了,中断了,后续代码不执行 注意: (1)try中如果出现异常,然后用catch捕获成功的话,那么try中后续的代码是不会执行的。 (2)如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行没有影响。 #### 3.catch中如何处理异常 #### package com.msb.test01; import java.util.Scanner; /** * @Auther: msb-zhaoss */ public class Test3 { 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("对不起,你的代码有问题!"); //第三种处理:打印异常信息: /*(1)调用toString方法,显示异常的类名(全限定路径)*/ /*System.out.println(ex); System.out.println(ex.toString());*/ /*(2)显示异常描述信息对应的字符串,如果没有就显示null System.out.println(ex.getMessage());*/ /*(3)显示异常的堆栈信息:将异常信息捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常*/ /* ex.printStackTrace();*/ //第四种处理:抛出异常: throw ex; } System.out.println("----谢谢你使用计算器111"); } } 【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);//终止当前的虚拟机执行 【6】try中出现异常以后,将异常类型跟catch后面的类型依次比较,按照代码的顺序进行比对,执行第一个与异常类型匹配的catch语句 【7】一旦执行其中一条catch语句之后,后面的catch语句就会被忽略了! 【8】在安排catch语句的顺序的时候,一般会将特殊异常放在前面(并列),一般化的异常放在后面。 先写子类异常,再写父类异常。 【9】在JDK1.7以后,异常新处理方式:可以并列用|符号连接: ![650b8528c4334f598bb0caba211eb3b9.png][] #### 4.异常的分类 #### #### ![17150858f9d94745be14363e327f8d47.png][] #### 注意:程序中语法错误,逻辑错误 都不属于上面的Error,Exception 【1】运行时异常: public class Test5 { //这是一个main方法,是程序的入口: public static void main(String[] args) { //运行时异常: int[] arr = {1,2,3}; System.out.println(arr.length); /*int[] arr2 = null; System.out.println(arr2.length);*/ System.out.println(arr[10]); } } 【2】检查异常: 处理方式1:try-catch嵌套try-catch public class Test6 { //这是一个main方法,是程序的入口: public static void main(String[] args) { //检查异常: try { try { Class.forName("com.msb.test01.Test").newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 处理方式2:多重catch public class Test6 { //这是一个main方法,是程序的入口: public static void main(String[] args) { //检查异常: try { Class.forName("com.msb.test01.Test").newInstance(); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { e.printStackTrace(); } } } 处理方式3:throws public class Test6 { //这是一个main方法,是程序的入口: public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { //检查异常: Class.forName("com.msb.test01.Test").newInstance(); } } #### 4.throw和throws的区别 #### (1)位置不同: throw:方法内部 throws: 方法的签名处,方法的声明处 (2)内容不同: throw+异常对象(检查异常,运行时异常) throws+异常的类型(可以多个类型,用,拼接) (3)作用不同: throw:异常出现的源头,制造异常。 throws:在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常。然后调用者对这个异常进行处理: 要么自己处理要么再继续向外抛出异常 [8c876ab2dc8d440398dee5613eb420e3.png]: https://img-blog.csdnimg.cn/8c876ab2dc8d440398dee5613eb420e3.png [650b8528c4334f598bb0caba211eb3b9.png]: https://img-blog.csdnimg.cn/650b8528c4334f598bb0caba211eb3b9.png [17150858f9d94745be14363e327f8d47.png]: https://img-blog.csdnimg.cn/17150858f9d94745be14363e327f8d47.png
相关 异常处理 异常处理 错误分类 语法错误 if 2 > 1 print(222) 未加冒号 dic = {"name"; "alex"} 字典中用冒号分隔键和 淩亂°似流年/ 2023年10月10日 10:15/ 0 赞/ 70 阅读
相关 异常处理 1、异常与错误 错误对于程序而言是致命的,运用java的异常处理机制,异常发生后经过处理,程序还是能正常运行的。如:数组越界异常、除数为0异常等。异常类是指Exception ╰半夏微凉°/ 2023年08月17日 16:09/ 0 赞/ 134 阅读
相关 异常处理 异常 1.什么是异常 在正常运行程序当中,即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误。 在执行时检测到的错误被称为 “异常”,异常不一定会 ╰半橙微兮°/ 2022年12月30日 07:45/ 0 赞/ 146 阅读
相关 异常处理 所谓异常,就是以对象的方式表示一个或一类错误,该异常对象不仅封装了错误信息,还包含了错误发生时的“上下文”信息。传统的错误处理方式是,每当程序调用了某个方法进行了某种操作,程序 Bertha 。/ 2022年06月12日 05:12/ 0 赞/ 307 阅读
相关 异常处理 异常定义: 程序在运行时出现不正常情况。 问题也是现实生活中的一个具体事物,可以通过java类的形式进行描述。并封装成对象。Java对不正常 悠悠/ 2022年06月11日 08:12/ 0 赞/ 234 阅读
相关 异常处理 C++的异常处理机制被称为是不可恢复的:一旦异常被处理,程序的执行就不能够在异常被抛出的地方继续。如果这些 catch 子句不包含返回语句,在catch子句完成它的工作之后,程 忘是亡心i/ 2022年05月23日 03:55/ 0 赞/ 286 阅读
相关 异常处理 异常写入日志 package javaBase.io.others; import java.io.; import java.text.S 妖狐艹你老母/ 2021年12月21日 18:49/ 0 赞/ 414 阅读
相关 异常处理 概念 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返 系统管理员/ 2021年12月14日 08:49/ 0 赞/ 431 阅读
相关 异常处理 1.异常概述 异常的类型:Error(致命的),Exception(非致命的)以及必检和免检异常。 异常就是一种对象,表示阻止正常进行程序执行的错误或者情况。 异常 待我称王封你为后i/ 2021年11月16日 13:22/ 0 赞/ 463 阅读
相关 异常处理 一、Error java虚拟机无法解决的严重问题。比如:JVM系统内部错误、资源耗尽等严重情况。StackOverflowError。 针对这类错误,一般不编写针对性的代码 痛定思痛。/ 2021年11月16日 10:28/ 0 赞/ 370 阅读
还没有评论,来说两句吧...