#Java学习#(七)异常

其他JAVA学习的内容见:目录

异常概述

  • 程序面对复杂度情况,例如:程序编写可能出错;用户的输入出错;程序所在的操作系统出错;网络不通等。
  • 异常:运行期出现的错误
try{
	//业务逻辑实现代码
	...
}catch(Exception e){
	处理错误
}
  • Java异常:一种用于处理程序中错误的机制。
    • 程序运行出现意外情况时,JVM生成一个Exception对象来通知程序。
  • 错误:程序运行过程中发生的异常事件。
    • 例如:除数为0,数组下标越界。
    • 说明:设计良好的程序应在异常发生时提供处理错误的方法,程序不会因为错误发生而阻断或发生不可预见的错误。
  • 流程:
    在这里插入图片描述

Java异常分类

在这里插入图片描述

  • 分类方法(1)

    • Error:错误,由JVM生成并抛出,如虚拟机错误,程序不做处理(少见)。
    • Exception:所有异常类的父类(可以处理的错误)。
      • RuntimeException
        • 例如:数组访问越界,访问空指针
        • 经常出的错误,可catch可不catch。
        • 编程导致的错误,程序员的错误。
      • 非RuntimeException
        • 试图读一个磁盘上不存在的文件:IOException
    • 理解:
      • 如果出现RuntimeException,就一定是程序员的问题
      • RuntimeException名字易引起误会,实际上所有的异常都发生在运行时刻
  • 分类方法(2)

    • 未检查(unchecked)异常
      • 包括:Error的子类异常 && RuntimeException的子类异常。
      • 特点:不能由编译器检查;可以通过编程避免。
    • 已检查(checked)异常:unchecked以外的异常
      • 特点:编译时检查,提高了程序的安全性

声明抛出异常

  • 方法:可以告诉编译器该方法有可能发生的错误。
  • public FileInputStream(String name) throws FileNotFoundException
  • 方法何时用throws声明要抛出的异常?
    • 调用了一个抛出已检查异常的方法,方法中没有处理异常。
    • 程序运行时发现错误,利用throw抛出一个异常,方法中没有处理异常。
  • 若一个方法抛出多个Checked异常,则在方法定义头部列出所有的异常,每个异常用“,”分开。
    • void method1() throws Exception1,Exception2,...
  • 总结
    • 程序不应该声明:
      • Error继承来的异常
      • 从RuntimeException继承来的异常(程序应该可以控制)。
    • 若方法中没有对异常进行处理,则必须在方法头中用throws声明方法可能抛出的异常(已检查异常)。
    • 一个方法抛出多个已检查异常,在throws后全部列出。
    • 一个方法应该声明所有可能抛出的已检查异常,而未检查异常要么不可控制(Error),要么应该避免发生

异常的捕获和处理

在这里插入图片描述

在这里插入图片描述

  • 方法处理异常的原则
    • 处理方法能够处理的异常
    • 不能处理的异常:抛出
      • 声明抛出已知的异常:如方法定义中抛出的异常
      • 代码中手工抛出:throw new ***Exception()

自定义异常

  • 自定义异常的方法
    • 继承Exception或RuntimeException,形成异常类。
    • 构造方法:
      • 无形参的构造方法
      • String形参的构造方法,String作为异常对象的描述信息
public class AuctionException extends Exception{
	// 无参数的构造器
	public AuctionException(){}
	// 带一个字符串参数的构造器
	public AuctionException(String msg){
		super(msg);
	}
}

方法重写中的异常处理

  • 重写方法需要抛出与原方法所抛出异常类型一致(相同的类或子类)的异常或不抛出异常
class A {
	public void method() throws IOException{...}
}
class B1 extends A{
	public void method() throws FileNotFoundException{...}
}
class B2 extends A{
	public void method() throws Exception{...}
}//错误的
class B3 extends A{
	public void method(){...}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章