- 异常
- Object->Throwable
- Error
- Exception
- RuntimeException
- 运行时异常
- 其它
- 受检异常(非运行时异常)
- RuntimeException
- try{}catch() {}
- jdk1.7 c(Exception|*** e) 同级/没有直接继承关系
- 将子类写在前面
- 1.7自动关闭流 closeable
- try(//初始化)
- 异常处理
- 定义: 异常时阻止当前方法和作用域继续执行的问题, 异常若不处理会导致程序中断执行
- 格式:
- Object->Throwable
try{
// 有可能发生异常的代码段 }catch(异常类型 对象){ // 异常的处理操作 }catch(异常类型 对象){ // 异常的处理操作 } ... finally{ // 异常的统一出口 }
- 子类在前, 同级的可以并列
- 过程;
- 一旦产生了异常, 系统自动产生一个异常类的实例化对象
- 如果有try, 则自动找匹配的catch语句执行, 如果没有异常处理, 则程序退出, 并由系统报告错误
- 所有catch根据参数来匹配异常类的实例化对象, 若匹配成功, 则由该catch块执行
- Throwable是所有异常的父类(是实现类)
- Error 系统级错误(JVM内部), 程序无法控制, 尽量避免
- Exception 程序错误
- 直接子类
- CheckedException(受检异常/非检查异常)必须try-catch或者用throw抛出(需用throws在方法参数后 声明)
- throw 抛出,把异常抛出, 由调用方处理
- throws 与throw配合使用
- RuntimeException之类
- 运行时异常, 没有强制要求, 不用try也不用抛出
- 直接子类
- new Exception().printStackTrace()打印异常的堆栈信息
- VM 的处理方式是,中断程序的运行。
- getMessage()
- 常见异常
- ArithmeticException
- NullPointerException
- ArrayIndexOutOfBoundsException
- IndexOutOfBoundsException
- IOException
- SQLException
- IllegalArgumentException
- NoSuchElementException
- InputMismatchException
- NumberFormatException
- ClassNotFoundException
- ClassCastException
- DateFormatException
- OutOfMemoryExceptioin
- StackOverFlowException?
- 规则:
- 第一、try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、 try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、 finally这三个关键字均不能单独使用(throw可以单独出现)
- 第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问
- 第三、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个 catch块,而不会再执行别的catch块。
- 自定义异常
- 定义: 通常开发中会把一些业务逻辑异常定义为异常类(继承已有异常类), 利用异常机制, 在多层调用时便于处理
- for instance : 登录验证异常/权限控制异常
- 对于一些检查异常, 可以将其包装为运行时异常, 便于解除方法重写时的一些限制
- 然后再调用方, 调用getCause()解除包装
- 定义: 通常开发中会把一些业务逻辑异常定义为异常类(继承已有异常类), 利用异常机制, 在多层调用时便于处理
- assert
- 关键字, 表示断言
- 定义: 判断某一个方法逻辑处理后的结果是否正确
- 语法: assert 表达式 : 不成立时输出的字符串;
- 需要给jvm 加参数 -ea
- AssertionException
- Debug...
- StringBuffer/StringBuilder
- 出现原因: 使用String连接字符串, 代码性能低, 因为String内容不可变
- 连接过程中会产生大量的垃圾对象
- 默认动态数组size:16
- capacity()
- new StringBuilder(int capacity)
- toString
- 出现原因: 使用String连接字符串, 代码性能低, 因为String内容不可变
- Extends
- 两种异常的区别
- 用不用强制try catch
- 是谁的直接子类
- final, finally, finalize三者的区别
- final:修饰属性->常量, 修饰方法->不能被子类重写, 修饰类->不能有子类
- finally:常与try catch配合使用, 始终执行
- finalize:当垃圾回收器确定没有引用指向该对象后, 会由对象回收器调用该对象的这个方法, 并回收内存, 由于具有不确定性, 所以不常用
- finally, 无路try中是否有有return/或是否异常执行, finally代码块均会执行
- 异常的统一出口
- 两种异常的区别
Screen clipping taken: 3/15/2017 23:57
- Notice
- throw与throws关键字: throws关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。实际 上对于Java程序来讲,如果没有加入任何的异常处理,默认由JVM进行异常的处理操作。 throw关键字表示在程序中手动抛出一个异常,因为从异常处理机制来看,所有的异常一旦 产生之后,实际上抛出的就是一个异常类的实例化对象,那么此对象也可以由throw直 接抛出
- 在catch之外也可以使用throw ***
- java [-ea]//JVM参数 class [//param]
- 默认可以抛出RuntimeException, 无需用throws声明
- 异常