异常:
一.概述
使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统运行过程中仍然会遇到一些问题,因为
很多问题不是靠代码能够避免的,比如:客户输入的数据格式、读取的文件是否存在、网络是否始终保持通畅等等
二.异常
1. 定义:
在Java语言中,将程序执行中发生的不正常情况称为异常
2. 分类:
Error:(B1:demo_01)
Java虚拟机无法解决的严重问题。例如:JVM系统内部错误、资源耗尽等严重情况,
StackOverflowError 和 OutOfMemoryError。一般不编写针对性的代码进行处理
Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理
分类:非受检异常
受检异常
三.Throwable (B1:demo_02)
1.java.lang.Throwable
|-----java.lang.Error:一般不编写针对性的代码进行处理
|-----java.lang.Exception:可以进行异常处理
|-----编译时的异常(checked)受检异常
|-----IOException
|-----FileNotFoundException
|-----ClassNotFoundException
|-----运行时的异常(unchecked)非受检异常
|-----NullPointerException
|-----ArrayIndexOutOfBoundsException
|-----ClassCastException
|-----NumberFormatException
|-----InputMismatchException
|-----ArithmeticException
四.异常的处理
在编写程序的时候,经常要在可能出现错误的地方加上检测的代码
Java采用的异常处理机制,是将异常处理的程序代码集中在一起与正常的程序代码分开,使得程序简洁、优雅、有益于维护
1.try-catch-finally:解决异常(B1:demo_03) 可以catch多个异常,finally可以省略
1.1 try{ }catch(异常类型1 变量名1){处理异常的方式1}catch(异常类型2 变量名2){处理异常的方式2}finally{一定会执行的代码}
1.2 在没有写finally的时候一旦try中的异常匹配到来某个catch,就进入catch异常处理,一旦处理完成,就跳出当前的try-catch,继续执行后面的代码
1.3 catch中的异常类型,如果没有父子类关系,那么异常类型的排序没有影响,如果满足父子类关系,那么子类一定要排在父类的前面
1.4 catch里 变量名.getMessage() / 变量名.printStackTrace()
1.5 在try结构中声明的变量,在出了try以后就不能被调用了,如果需要用的话可以先定义到try结构外面
1.6 使用try-catch-finally处理编译时异常,使得程序在编译时不再报错,但是运行时仍可能报错
1.7 finally中声明的是一定会被执行的代码,例如try中有return、catch中也有异常也不影响finally里代码的执行
1.8 什么时候才会写代码到finally里:需要自己关闭的物理连接(数据库连接、输入输出流、网络编程Socket)需要声明在finall
2.throws+异常类型:上报异常(B1:demo_04)
2.1 throws + 异常类型
2.2 一旦方法体执行,遇到异常后就会在代码处生成对应异常类对象,此对象匹配到throws的异常类型后就会抛出异常对象。异常代码后面的代码就不再执行
2.3 throws只是将异常抛给方法的调用者,并没有真正的将异常处理
抓抛模型:
1.抛:程序在执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出,一旦抛出对象后,其后的代码就不再运行
关于异常对象的产生:
① 系统自动生成的异常对象
② 手动的生成一个异常对象,并抛出(throw)
2.抓:可以理解为异常的处理方式:① try-catch-finally ② throws
自定义异常;
1.继承于现有的异常结构:RuntimeException、Exception
2.提供全局变量:serialVersionUID