首页 > 代码库 > java自学之路-day14

java自学之路-day14

JAVA14

异常

引入

l  Java代码在运行时期发生的问题就是异常

l  Java中把异常信息封装成了一个类

l  当出现了问题时,就会创建异常类对象并抛出异常相关的信息

l  如异常出现的位置 原因等

继承体系

l  java.lang
类 Throwable   可以被扔出去的类

l  java中所有的错误和异常

l  直接已知子类:

Error, Exception

异常和错误的区别

l  数组访问越界是异常

Exception RuntimeException

编译,运行期间出现的 可以有具体的方式进行处理

 

l  数组空间太大是错误

Error

运行期间发生了错误 没有具体的处理方法 系统级别的问题 都是jvm所在系统发生的,并反馈给jvm 只能修改代码

 

 

异常产生的原因和处理方式

原因

l   

 

l  方法内部出现问题   JVM检测出了异常 创建了相应异常的对象

l  方法内部无法处理 将异常的对象抛给方法的调用者

l  方法的调用者main 也无法处理 就将对象抛给了 main方法的调用者

l  也就是JVM虚拟机 然后JVM接收到异常

l  然后JVM将异常信息以红色字体输出到控制台 将程序在调用方法代码处停止

处理

throw关键字处理

l  方式使用时考虑异常出现 需要对传递的参数进行判断 看是否合法 如果不合法就要告诉调用者,这是就要用抛出异常的方式来告诉

l  在方法的内部抛出异常 

l  示例

  1. 进行判断 执行抛出异常 throw new Exception(“信息”)
  2. 方法名后面 加 throws 异常类型 进行声明异常
  3. 方法调用时就要考虑到方法的异常问题 调用时就要有如果出现异常进行处理的方法,比如把异常抛给上一级 比如 main方法抛出给虚拟机

 

 

  1.  

 

  1.  

 

Try …catch…finally处理

l  格式

try { 可能出现异常的代码 } catch { 异常处理的方式 } finally { 必须要执行的代码   }

l  示例

 

  1. Main方法执行 数组定义
  2. 进入try代码块
  3. 调用方法
  4. 方法执行  判断为空  创建自己写好的异常类对象
  5. 把异常对象抛给方法调用者 后面的程序不再执行
  6. 方法调用者 的try检测到了有异常的发生 接收到了一个异常对象
  7. 将异常对象抛给catch代码块,处理这个异常
  8. Catch 抓住  捕获
  9. Catch可以捕获相应类型的异常
  10. Catch捕获到这个异常 进行处理
  11. 异常被处理 程序继续执行

多catch捕获

l  可以处理多个异常

 

 

l  注意事项

  1. catch写的异常有顺序概念
  2. 平级异常  : 抛出的异常类之间没有继承关系
  3. 平级异常没有顺序
  4. Ctrl t继承树
  5. 上下级关系的异常 必须越高级的父类写在下面
  6. 否则编译会报错
  7. 低级的catch会没用

 

finally代码块

l  必须要执行的代码

l  无论是否有异常出现,都执行该代码块

l  用于释放资源

try…catch…和throws怎么选择

l  用了有抛出异常的方法就要用try…catch…

l  否则一直往上抛异常就会导致程序停止

编译异常和运行时期异常

l  编译异常

  1. 调用了抛出异常的方法不处理编译就会失败(try throws)

l  运行异常

  1. 凡是抛出的异常是RuntimeException类或者是他的子类 都是运行时期异常
  2. 凡是方法内部抛出的是运行异常,不需要throws声明
  3. 调用者也不需要处理
  4. 设计原因

a)         运行异常不能发生

b)         但是如果发生需要程序员停止程序 修改源代码

c)         运行异常一旦发生 后面的代码就没有意义

案例

l  计算圆形面积

l  要调用运行时异常 处理传递半径为-1的情况

方法重写时的异常处理

l  父类的方法抛出异常 

  1. 子类重写后可以不抛出异常
  2. 也可以不抛出异常
  3. 如果子类抛出异常 抛出的异常对象不能大于父类的异常
  4. 子类也不能抛出平级异常
  5. 原因

多态调用方法时 父类调用的是父类的原来的方法

  1. 父类抛出异常子类也不能抛出异常
  2. 子类方法抛出了异常 重写父类的方法中调用了该方法 抛出异常时只能用try catch抛出 不能向上抛出 因为父类没有抛出异常

Throwable类方法

l  String getMessage()

对异常信息的详细描述

l  String toString()

对异常信息的简短描述

l  Void printStackTrace()虚拟机默认的调用方法

对异常信息追踪到标准的错误流

l  示例

  1.  

 

  1.  

 

 自定义异常

引入

l  Java预先定义了很多的异常

l  有些异常没有

l  因此需要自己写

l  例如 负数 分数

l  格式  xxxException

l  自定义异常类需要继承父类Exception

示例

l  计算成绩的平均数 传入负数的异常停止运算

l   

l   

l   

 

l  大多数使用运行时异常

l  需要写空参构造器 有参构造器

l  有参构造器 中用super 调用父类构造即可

 

java自学之路-day14