Thorwtable(异常)
概念:程序非正常执行(运行时)的情况,程序【运行】遇到了问题!
a) Exception(例外):业务处理代码层面的时候发生的问题,这种问题可以解决,可以通过异常机制进行处理
b) Error(错误):业务处理jvm层面(运行环境)发生的问题,这种问题不能或不应该通过异常机制进行处理
java是面向对象,每一个能被处理的程序问题一般都是Exception对象
产生异常:程序代码在执行的过程中不能正常完成工作那么产生异常
产生异常的方式:
1)方法执行产生
2)表达式执行产生
3)手动产生:
语法:throw Exception对象
作用:方法在执行过程中,如果不能正常完成业务逻辑,那么就可以手动产生一个异常
java程序中遇到异常问题一定要处理
我们不处理的话会自动交给jvm处理
jvm处理
1)把异常问题的详细信息打印到控制台 2)把异常的线程(程序)停止了,异常后面的代码不执行
throw和return对比
1)throw 异常对象;->把异常带回到方法的调用处-throw后代码不会执行
2)return 数据值; ->把数据值带回到方法的调用处-return后代码不会执行
java处理异常的方式
1)throws :方法自己遇到了异常(问题),自己不处理,把异常抛出给上级(方法调用者)处理
--》如果所有的方法都抛出异常不处理-那么最终jvm处理
2)try catch:方法自己遇到了异常(问题),自己处理,不会抛出异常,处理异常之后,代码可以正常执行。
exception和runtimeException的区别
1)exception:程序遇到了可以处理的问题
2)runtimeException:程序遇到了可以处理的问题,所有的方法都默认throws(抛出)了runtimeException,
如果对于runtimeException需要进行throws,那么可以不写throws的处理代码。
throws的处理
语法:[访问修饰符] [static] 返回值类型 方法名(参数列表)[throws 异常类1,异常类2...]{}
注意点:1)throws后面可以跟多个异常类
2)方法发生的了异常,可以抛出异常的父类型(大问题)-》抛出大问题调用者解决了,那么小问题也能解决
述异常的时候-如果系统没有对应的异常类
》可以自定义异常来准确的描述异常(问题)
自定义异常的语法
1)类名:异常原因+Exception
2)继承Exception或RuntimeException
3)保证两个构造器
a)空构造器
b)有参数String的构造器 ->用来给创建的异常对象设置异常消息(原因)
方法的重写
1)有超类型和子类型
2)针对的成员方法
3)方法的签名
超类型==子类型
4)返回值类型
a)void和基本类型
超类型==子类型
b)引用类型
超类型>=子类型
5)访问修饰符
超类型<=子类型 -->子类型比父类型更开放
超类型不能是private
6)抛出的异常类列表
超类型>=子类型 -->子类型比父类型少惹麻烦
注意点
1)>=:不是异常类的个数
2)>= 指超类型和子类型里最大的异常类之间的关系
java异常处理方式
throws :方法自己遇到了异常(问题),自己不处理,把异常抛出给上级(方法调用者)处理
--》如果所有的方法都抛出异常不处理-那么最终jvm处理
try catch:方法自己遇到了异常(问题),自己处理,不会抛出异常,处理异常之后,代码可以正常执行。
try catch finally处理
语法:try{正常业务逻辑的代码(可能出现异常)
}[
catch(处理的异常类 处理的异常引用变量){
处理异常的代码
}
...
]
||
[
finally{
一定执行的代码(正常和异常都会执行)
}
]
try:(报告我们的异常)执行并监听程序的代码是否有异常,有异常找对应的catch
catch:(处理异常)负责处理一种对应异常类的问题
finally:一定执行的代码(正常和异常都会执行)->释放资源的代码(关闭流,数据库,网络...)
对应的结构
1)try catch ->监听我们的异常-并处理对应的异常
trycatch执行的过程
a)没有异常:从try由上到下执行完所有的代码-然后离开try catch结构
b)有异常:从try由上到下执行到异常代码的位置-通过当前异常查找对应的catch
x)有对应的catch:直接执行catch的代码-然后离开try catch结构
x)没有对应的的catch:直接离开trycatch结构,把异常抛给方法的调用者
-如果调用者也没有处理-一直抛-最终交给jvm
2)try catch finally ->监听我们的异常-并处理对应的异常-执行一定要处理的逻辑
3)try finally -》监听我们的异常-无论是否有异常-都执行一定要处理的逻辑
trycatch的注意点
1)一个try可以对应多个catch
2)可以通过异常类的超类型来catch异常
3)catch的异常有超类型和子类型的关系时-先catch子类型 再超类型...
异常常用的api:
1)拿到异常对象所在的类的完整类名
异常对象.getClass().getName()
2)拿到异常对象的消息
异常对象.getMessage()
3)拿到异常对象表示的异常问题发生的所有的位置信息
异常对象.getStackTrace()
4)把异常对象的详细信息(类名,消息,位置)(红色文字)打印到控制台
异常对象.printStackTrace()