异常处理

Java进阶02 异常处理

半腔热情 提交于 2020-01-15 14:39:41
程序很难做到完美,不免有各种各样的异常。比 如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足。为了解决这些异常,我们需要知道异常发生的原因。对于一些常见的异常,我们还可以提供 一定的应对预案。C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的。程序员需要查询大量的资料,才可能找到一个 模糊的原因。面向对象语言,比如C++, Java, Python往往有更加复杂的异常处理机制。这里讨论Java中的异常处理机制。 Java异常处理 异常处理 Java的异常处理机制很大一部分来自C++。它允许程序员跳过暂时无法处理的问题,以继续后续的开发,或者让程序根据异常做出更加聪明的处理。 Java使用一些特殊的对象来代表 异常状况,这样对象称为异常对象。当异常状况发生时,Java会根据预先的设定, 抛出(throw)代表当前状况的对象。所谓的抛出是一种特殊的返回方式。该线程会暂停,逐层退出方法调用,直到遇到 异常处理器(Exception Handler)。异常处理器可以 捕捉(catch)的异常对象,并根据对象来决定下一步的行动,比如: 提醒用户 处理异常 继续程序 退出程序 ...... 异常处理器看起来如下,它由try, catch, finally以及随后的程序块组成。finally不是必须的。 try { ...; } catch()

JAVA---异常处理

孤者浪人 提交于 2020-01-15 07:11:26
java异常处理 java异常简介 异常是程序中的一些错误 ,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序 健壮性 。在有效使用异常的情况下,异常能清晰的回答 what, where, why 这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。 异常发生的原因: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 常见的异常 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。 Exception 类的层次 所有的异常类是从 java.lang.Exception 类继承的子类。 Throwable 包含两个子类error(错误)和exception(异常) RuntimeException

java学习之异常处理(三)

雨燕双飞 提交于 2020-01-15 05:50:11
处理异常的两种方法(Throws和 try—catch) 使用try-catch捕捉异常 语法格式: try{ } catch(异常类型1 变量){ } catch(异常类型 2 变量 ){ } 代码示例: public static void main(String[] args) { try{ FileInputStream fileInputStream = new FileInputStream("c:/a.txt"); } catch (FileNotFoundException e) { System.out.println("捕捉到异常,正在处理"); } } 执行结果 注释: 注释:变量内存地址指向的是异常类型的事件。 1.catch语句可以写多个 2.捕获的异常应当与try中发生的异常相对应 3.catch中捕获的异常类型可以是捕获类型的父类:例如 FileInputStream file = new FileInputStream(”c:/ab.txt“); 这个语句当文件不存在时,返回的异常类型是FileNotFoundException 但是也可以是这个异常类型的父类型 IoException. 4.多个catch捕捉的异常类型必须自上而下,从小到大进行捕捉 5.try catch中最多执行一个分支,结束后向下执行 6.当出现一个异常时

异常处理---try语句

纵然是瞬间 提交于 2020-01-15 05:43:36
异常处理----try语句 当认为某些代码可能会出错时,就可以用try语句来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块。 try语句格式 try: < 语句 > #运行别的代码 except < 名字 > : < 语句 > #如果在try部分引发了'name'异常 except < 名字 > , < 数据 > : < 语句 > #如果引发了'name'异常,获得附加的数据 else: < 语句 > #如果没有发生异常 try: < 语句 > finally: < 语句 > #退出try时总会执行finally语句 try语句工作原理 1.当开始执行一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里了,try语句先执行,没有发生异常,就输出执行结果;如果出现异常,则执行except语句。 2.如果当try后的语句执行时发生异常,python就跳回到try并哪执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又发生新的异常)。 3.如果在try后的语句里发生了异常,却没有匹配的except语句,异常将被递交到上层的try,或者程序的最上层(这样将结束程序

python 3操作文件的异常处理

心不动则不痛 提交于 2020-01-14 18:12:12
在执行python脚本时,正常运行的时候,也可能发生错误,返回的错误类型就是报错信息,我们可以针对其返回的错误类型执行相应的语句,错误类型有很多,如:ValueError、TypeError、NameError、ZeroDivisionError..... 1、try / except 来个简单的语法,如下: while True: try: x = int(input('请输入一个数字:')) break except ValueError: print('您输入的不是一个数字,请再次尝试!') 执行结果如下: 请输入一个数字:d 您输入的不是一个数字,请再次尝试! 请输入一个数字:3 try语句按照如下的方式工作: 首先,执行try子句(在关键字try和except之间的语句)。 如果没有发生异常,则忽略except子句,try子句执行后结束。 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将会被忽略,如果异常类型和except之后定义的异常类型相同,则会执行except关键字下的子句。 如果一个异常没有与任何except匹配,那么这个异常将会传递给上层的try中。 一个try语句可以包含多个except子句,分别来处理不同的特定异常,但是最多只有一个except分支会被执行。 处理程序将只针对对应的try子句中的异常进行处理

构造函数、析构函数抛出异常的问题

自古美人都是妖i 提交于 2020-01-14 07:39:24
1. 抛出异常 1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。 该语句的格式为: throw 表达式; 如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配。由于C++使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义,而表达式的类型就特别重要。 1.2 抛出异常实际是作为另一种返回值来使用的。 抛出异常的好处一是可 以不干扰正常的返回值 ,另一个是 调用者必须处理异常 ,而不像以前c语言返回一个整数型的错误码,调用者往往将它忽略了。 1.3 举例说明 假如说A方法掉调用-->B方法调用-->C方法。 然后在B和C方法里定义了throws Exception。A方法里定义了Try Catch。 那么调用A方法时,在执行到C方法里出现了异常,那么这个异常就会从C抛到B,再从B抛到A。在A里的try catch就会捕获这个异常,然后你就可以在catch写自己的处理代码。 那么为什么当时出现了异常不去处理呢? 因为你业务逻辑调用的是A方法,你执行了A方法,当然要在A里得到异常,然后来处理。如果在C里面就处理异常

第二十八节:异常处理

左心房为你撑大大i 提交于 2020-01-14 04:41:24
异常的简介 异常就是错误对象 编译时异常 运行时异常 public class Test { public static void main ( String [ ] args ) { System . out . println ( 1 / 0 ) ; //0不能做除数 System . out . println ( "呵呵" ) ; // gsgsgsgrgshsehsehteshe//编译时错误 //1.异常是错误,运行时异常 //2.抛异常,创建一个错误对象,把错误对象丢出来 //3.捕获异常,默认由JVM来把错误信息进行捕获,打印出来。JVM会终止程序的执行 } } 运行结果: Exception in thread "main" java . lang . ArithmeticException : / by zero at Test . main ( Test . java : 3 ) Process finished with exit code 1 抛异常 捕获异常,默认是JVM来捕获异常,程序会中断 (自主学习,侵权可删) 来源: CSDN 作者: —张tel 链接: https://blog.csdn.net/zhangxu5/article/details/103743766

异常处理和约束

断了今生、忘了曾经 提交于 2020-01-13 18:37:34
主要内容: 1. 异常处理 2. 类的约束 3. MD5加密 4. 日志 1. 异常处理 异常就是程序在运行过程中产生的错误 (1)异常处理方案一: def calculate(a,b): return a/b try: ret = calculate(10,0) print(ret) except Exception as e: print("除数不能是0") # 除数不能是0 try...except的含义: 尝试着运行xxxxx代码. 出现了错误. 就执行行except后面的代码. 在这个过程中,当代码出现错误的时候,系统会产生⼀个异常对象,然后这个异常会向外抛,被except拦截,并把接收到的异常对象赋值给e 这里的 e就是异常对象 ,这里的 Exception是所有异常的基类 , 也就是异常的跟,即所有的错误都是Exception的子类对象. 然而: 用Exception表示所有的错误,太笼统了,所有的错误都会被认为是Exception. 当程序中出现多种错误的时候, 就不好分类了, 最好是出什么异常就用什么来处理,更加合理了,所以 在try...execpt语句中会写更多的except. try: print("各种操作....") except ZeroDivisionError as e: print("除数不能是0") except

再谈SpringMvc文件上传异常处理

无人久伴 提交于 2020-01-13 15:57:20
@ExceptionHandler(MaxUploadSizeExceededException.class) public void handleException(MaxUploadSizeExceededException ex, HttpServletResponse response) throws Exception { StringBuilder error = new StringBuilder(); if (ex instanceof MaxUploadSizeExceededException) { MaxUploadSizeExceededException ms = (MaxUploadSizeExceededException) ex; SizeLimitExceededException cause = (SizeLimitExceededException) ms.getCause(); long maxUploadSize = ms.getMaxUploadSize(); String actualSize = String.valueOf(cause.getActualSize()); double parseDouble = Double.parseDouble(actualSize) / 1024 / 1024; BigDecimal b =