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()