1.为什么要有异常处理机制?
- 避免一些小问题的出现而影响整个系统的运行。
2.如何避免?
- 整理问题,进行分析,分类,进行相应的处理——作出对应处理办法——编写对应的类——编写功能处理对应问题
3.Java提供的类有哪些?
- 异常类:Throwable 包:java.lang
- 含义:所有错误和异常的基类,即Java中所有所有问题处理类的起源
- 类的使用:普通的类,提供构造方法和普通处理业务的方法
- 其直接子类:
- 错误:Error -- 一定会出现的严重问题,必须解决该问题(修改代码)程序才能运行
- 异常:Exception -- 应该尝试获取问题,进行相应处理,不影响整个程序运行
- 其直接子类:
4.Error和Exception细化
- Error:程序执行时一定会发生的问题(如写错代码,内存溢出等)
- -- 发生时控制台打印出现 java.lang.XXXXError 的信息
- Exception:程序执行时有可能会发生的问题(一般是数据和语法错误,如除数为0,数据类型不符合等)
- --异常出现时,在我们传入正确数据的前提下,程序是可以正常运行的
- --可以通过使用过程中编写一些算法的方式来避免错误的出现
5.提供帮助简化处理异常的方法
- Error:无法处理,只能修改代码
- Exception:可以处理,程序执行过程中偶然出现,去检测并避免它
- #Java中如何处理:提供了一套处理业务代码块(catch可以通过改变出现异常对象方式同时出现多次)
try{ 可能出现异常的代码块 }catch(出现的异常对象){ 出现异常的解决方法 }finally{ 不管出不出现异常,都会执行 }
- 使用方式:
- try{}:主要的功能就是将可能出现异常的代码块圈起来进行监测
- catch(异常类类型 对象名){}:当try监测到异常发生的时候,虚拟机就会创建对应异常类对象,交给catch根据类型进行捕获,将异常对象作为参数自动传入(没有该类型异常时,传入为空)
- *自定在catch块中,自定义业务功能
- finally{}:放在异常处理组合的最后,不管是否发生异常,它都会执行
- *该块的作用是关闭之前开启的数据流通道
- 未发生异常--代码执行过程:直接按照代码顺序执行,不执行catch
- 发生异常--代码执行过程:try中监测到异常发生--catch直接捕获异常,try中代码不再继续执行--执行catch块内容【异常处理】--继续向下代码执行
#try,catch,finally的组合
- 1)一个try块对应一个或者多个catch块
- #备注:
- a.当try检测到一个异常发生,try中的代码块执行会直接结束并直接跳转到对应catch块执行
- b.可以添加一个Exception对象的块来监测所有的异常对象(务必放在catch群(如果是)的最后)
- c.catch块的执行遵循从上往下的先后顺序(异常类对象范围:父类>子类)
- #备注:
- 2)一个try对应一个或者多个catch块对应一个finally块——没有异常正常执行业务,有了异常就捕获操作,最终用finally进行通道关闭
- 3)一个try对应一个finally块——不管有没有异常都不处理,一定要关闭通道,主要目的为释放资源
6.自定义异常
-
开发者可以将自己的想法创建为异常类,作为异常进行处理
- #如何自定义异常:
- 创建一个自己的类——继承一个Java异常家族中的任何一个类
- 两个关键字:throw,throws
- throw:抛出异常,产生异常,指定这个位置有异常发生
- 语法:throw new 构造方法();
- throws:与throw搭配使用,当抛出异常时,将抛出的异常在对应方法上面声明,告诉调用者这里有异常需要处理
- 语法:方法的参数括号与方法体之间添加 throws 类(例:public void login(String uname,String upassw) throws OwnException{})
- throw:抛出异常,产生异常,指定这个位置有异常发生
- #如何自定义异常:
-
说明:throw抛出的异常,在调用时可以处理,也可以继续抛出
##常见的异常问题:
- ArithmeticException:出现数学中异常的运算条件是,例如除数为0
- IndexOutOfBoundsException:下标索引越界
- ClassCastException:对象类型转化问题
- NullPointerException:空指针异常,对象没有new就去调用类信息
- ClassNotFoundException--没有找到类,反射机制,使用第三方框架
- NoSuchFieldException--没有这个属性
- NoSuchMethodException--没有这个方法
- IOException:文件处理,读取的文件不存在,格式不对等等