JavaOOP 05 异常

五、异常

5.1 认识异常

5.1.1 异常的概念

在计算机程序运行的过程中,总是会出现各种各样的错误,如除法运算时除数为0、数组下标越界、数据类型不一致、内存不足、栈溢出等,在Java中,将程序执行过程中发生的不正常的行为叫做异常.

5.1.2 异常的分类

所有的异常都定义为类

异常中有着不同类型的异常,如下

Throwable
Error
Exception
VirtualMechineError
AWTError
THreadEeath
RuntimeException
Checked异常
ArithmeticException
ArrayIndexOutOfBoundsException
ClassCastException
IllegalArgumentException
InputMismatchException
NullPointerException
NumberFormatException
FileNotFoundException
EOFException
SQLException

1. Throwable 类

  • java语言中所有错误或异常的父类

2. Error 类

  • Java.lang.Error 类包含仅靠程序本身无法恢复的严重错误,一般与JVM相关的问题
  • java运行时环境的内部错误或硬件问题

3. Exception 类

  • java.lang.Exception 类 是程序本身可以处理的异常

  • Exception 类主要分为 运行时(RuntimeException)异常检查(Check)异常

    • java常见的 运行时异常

    • 异常说明
      ArithmeticException当出现算术错误时,抛出此异常,例如,在一个整数"除以0"时
      ArrayIndexOutOfBoundsException当非法索引访问数组时,抛出此异常。例如,索引为负或大于等于数组长度
      ClassCastException当试图将对象强制转换为非本对象类型的子类时,抛出此异常
      IllegalArgumentException当向方法传递了一个不合法或不正常的参数时,抛出此异常
      InputMismatchException当欲得到的数据类型与实际输入的类型不匹配时,抛出此异常
      NullPointerException当应用程序试图在需要对象的地方使用null时,抛出此异常
      NumberFormatException当试图将字符串转换成一种数字类型时,但该字符串不能转换为适当格式时,抛出此异常。例如,把 “ABC” 转换成数字

5.2 异常处理机制

在程序设计时,必须考虑到可能发生的异常时间并进行处理

5.2.1 异常处理结构

java中针对异常的处理提供了 try、catch、finally、throws、throw

语法 :

 try{
     //有可能出现异常的语句
 }[catch(异常类型 异常对象){
     //异常处理句
 }] [finally{
     //一定会运行到的语句
 }]
  • try 语句用于监听,当try语句块内发生异常时,异常就会被抛出,然后停止运行try代码块

  • catch 语句用于捕获异常,catch语句用来捕获try语句中抛出的异常;

  • try 语句抛出的异常类型,与 catch 捕获的异常类型相同时,则会执行catch 代码块

  • finally 语句总会被执行,主要用于回收try语句块内打开的资源,例如关闭数据库等等

  • catch 语句和 finally 语句都可选,但是 catch 和 finally 不能同时消失

  • 异常格式常见的组合 :try-catch、try-catch-finally、try-finally 三种

5.2.2 异常对象常用的方法

在catch代码块当中,可以调用异常方法进行输出信息

异常对象常用的方法

方法名说明
void printStackTrace()输出异常的堆栈信息
String getMessage()返回异常信息描述字符串

示例

public class Demo01 {
    public static void main(String[] args) {
        try {
            
        }
        //异常类型 Exception
        catch (Exception e){
            //异常方法
            e.printStackTrace();
            e.getMessage();
        }
    }
}

5.2.3 多重 catch 语句

**当我们希望针对不同的异常类型采取不同的处理方式,可以使用 catch **

语法 :

try{
     //有可能出现异常的语句
 }[catch(异常类型1 异常对象){
     //异常处理句
 }][catch(异常类型2 异常对象){
     //异常处理句
 }] [finally{
     //一定会运行到的语句
 }]
  • 如果 try 内的代码出现的异常类型为异常类型1 则执行异常类型1内的代码块

5.2.4 声明异常——throws 关键字

throws 表示该方法可能会抛出此类异常

语法:

public void 方法名() throws 异常类型[,异常类型]{
    //方法体
}
  • 如果方法体内发生异常,则会抛出该异常

  • 在调用方法时则会发生异常

5.2.5 抛出异常——throw 关键字

当需要根据条件判断是否抛出异常时,则可以使用throw 关键字

语法:

throw new 异常名([参数列表])

例如:除数为0时抛出一个异常

public class exception {
    //声明一个除法
    //throws表示准备抛出一个异常
    public void chu(int a,int b) throws Exception{
        //除数为0时,抛出一个算术异常
        if(b==0){
            throw new Exception("除数不能为0");
        }else{
            System.out.println(a/b);
        }
    }
}
  • throw表示抛出了一个异常
  • throws 表示准备抛出一个异常,准备抛出throw抛出的异常
  • throw只能抛出 Throwable 类或子类的对象

5.2.6 自定义异常

当 Java 异常体系中提供的异常类型不能满足程序的需要时,可以自定义异常类

自定义异常类的三个步骤

  1. 定义异常类 继承 Exception 类 或 RuntimeException 类

  2. 编写异常类的构造方法 ,调用父类的构造方法,常见的有四种形式

//构造方法 1
public Exception(){
    super();
}
//构造方法 2
public Exception(String message){
    //message是提示语句
    super(message);
}
//构造方法 3
public Exception(String message,Throwable cause){
    super(message,cause);
}
//构造方法 4
public Exception(Throwable cause){
    super(cause);
}
  1. 实例化自定义异常对象,并使用 throw 关键字抛出。

创建自定义异常

public class exception extends Exception{
   public exception(String message){
       super(message);
   }   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值