第五章 异 常

目录

5.1--什么是异常

5.2--运行时异常&编译时异常 

5.2.1--运行时异常

5.2.1.1--常见的运行时异常

5.2.2--编译时异常

5.3--异常的处理方法&语法

5.3.1--处理异常的五个关键词(try-catch-finally-throws-throw)

5.3.2--try...catch...finally语句

5.4--抛出异常

5.4.1--throws关键词

5.4.2--throw关键词

注意:throws关键字用在方法声明中,用来指明方法可能抛出的多个异常。

通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。

5.5自定义异常

5.6错题整理


5.1--什么是异常


//Java中的异常是指Java程序在运行时可能出现的错误或非正常情况.

      eg: 

       在程序中打开一个根本不存在的文件;在程序中除0等.

   所有异常类都继承自Java.lang包下的Throwable类。

   Trowable类的继承体系如下图所示:

 //Error类(错误类):仅靠修改程序本身不能恢复运行

//Exception(异常类):程序本身可以处理的异常。

  Throwable类常用的方法

Throwable类常用方法
方法功能
String get Message()返回异常的消息字符串
String toString()返回异常的简单信息描述
Void printStrackTrace()获取异常类名和异常信息以及异常出现在程序中的位置,把信息输出到控制台

运行结果


5.2--运行时异常&编译时异常 


5.2.1--运行时异常

//程序在运行时产生的异常,及时不编写异常处理代码,依旧可以通过编译(unchecked异常)也叫运行时异常

5.2.1.1--常见的运行时异常

 

 

5.2.2--编译时异常

//程序在编译时产生的异常,这些异常必须进行处理否则程序无法正常运行(checked异常)也叫做编译时异常

***在Expection类中,处理RuntimeException类以外,其他子类都是编译时异常

处理编译时异常有两种方式:

(1)使用try...catch语句对异常进行捕获处理。

(2)使用throws关键词声明抛出异常,由调用者对异常进行处理。

5.3--异常的处理方法&语法

5.3.1--处理异常的五个关键词(try-catch-finally-throws-throw)

 

5.3.2--try...catch...finally语句

//异常捕获try…catch...finally语句的基本语法格式

    try {
         // 可能发生异常的语句
    } catch(ExceptionType1 e){
         // 对捕获的异常进行相应处理
    } catch(ExceptionType2 e){
         // 对捕获的异常进行相应处理
    } finally {
         // 无论是否发生异常,此代码块代码总会执行
    }

***进入finally代码块的语句,不管程序是否异常,代码都会被执行。因此,通常用finally代码处理必须做的事情。

     如果try ... catch执行了System.exit(0).语句,finally语句不执行

//System.exit(0).表示退出当前的Java虚拟机,Java虚拟机停止了,任何代码都不能执行

异常捕获try…catch...finally语句的处理流程

eg:

源代码

public class Example03 {
    public static void main(String[] args) {
        //下面的代码定义了一个try…catch…finally语句用于捕获异常
        try {
            int result = divide(4, 0);       //调用divide()方法
            System.out.println(result);
        } catch (Exception e) {            //对捕获到的异常进行处理
            System.out.println("捕获的异常信息为:" + e.getMessage());
            return;                             //用于结束当前语句
        } finally {
            System.out.println("进入finally代码块");
        }
        System.out.println("程序继续向下…");
    }
    //下面的方法实现了两个整数相除
    public static int divide(int x, int y) {
        int result = x / y;           //定义一个变量result记录两个数相除的结果
        return result;                 //将结果返回
    }
}

运行结果

 

5.4--抛出异常

5.4.1--throws关键词

throws关键字抛出异常的基本语法格式:

[修饰符] 返回值类型 方法名([参数类型 参数名1...]) throws 异常类1,异常类2,... {
	// 方法体...
}

//throws关键字需要写在方法声明的后面,并在后面需要声明方法中发生异常的类型.

eg:

源代码:

public class Example05 {
    public static void main(String[] args) {
        //下面的代码定义了一个try…catch语句用于捕获异常
        try {
            int result = divide(4, 0);   //调用divide()方法
            System.out.println(result);
        } catch (Exception e) {           //对捕获到的异常进行处理
            e.printStackTrace();          //打印捕获的异常信息
        }
    }

    //下面的方法实现了两个整数相除,并使用throws关键字声明抛出异常
    public static int divide(int x, int y) throws Exception {
        int result = x / y;      //定义一个变量result记录两个数相除的结果
        return result;            //将结果返回
    }
}

运行结果:

注意当调用者在调用有抛出异常的方法时,除了可以在调用程序中直接进行try…catch异常处理外,也可以根据提示使用throws关键字继续将异常抛出,这样程序也能编译通过。但是,程序发生了异常,终究是需要进行处理的,如果没有被处理,程序就会非正常终止

5.4.2--throw关键词

//throw关键字用于在方法体内抛出一个异常类对象。基本语法格式如下:

[修饰符] 返回值类型 方法名([参数类型 参数名,...]) throws 抛出的异常类 {
            // 方法体...
            throw new Exception类或其子类构造方法;
}

 

注意:throws关键字用在方法声明中,用来指明方法可能抛出的多个异常。

通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。

eg:

源代码

public class Example07 {
    // 定义printAge()输出年龄
    public static void printAge(int age) throws Exception {
        if(age <= 0){
            // 对业务逻辑进行判断,当输入年龄为负数时抛出异常
            throw new Exception("输入的年龄有误,必须是正整数!");
        }else {
            System.out.println("此人年龄为:"+age);
        }
    }
    public static void main(String[] args)  {
        // 下面的代码定义了一个try…catch语句用于捕获异常
        int age = -1;
        try {
            printAge(age);
        } catch (Exception e) {  // 对捕获到的异常进行处理
            System.out.println("捕获的异常信息为:" + e.getMessage());
        }
    }
}

运行结果:

5.5自定义异常

//Java允许用户自定义异常类,但自定义异常类必须继承Exception类或其子类。

源代码:

class DivideByMinusException extends Exception{
 public DivideByMinusException (){
     super();          	// 调用Exception无参的构造方法
   }
   public DivideByMinusException (String message){
       super(message); 	// 调用Exception有参的构造方法
    }
}
public class Example09 {
    public static void main(String[] args) {
        // 下面的代码定义了一个try…catch语句用于捕获异常
       try {
           int result = divide(4, -5
           );
            System.out.println(result);
      } catch (DivideByMinusException e) {     // 对捕获到的异常进行处理
            System.out.println(e.getMessage()); // 打印捕获的异常信息
        }
  }
    // 下面的方法实现了两个整数相除,并使用throws关键字声明抛出自定义异常
   public static int divide(int x, int y) throws DivideByMinusException{
        if (y < 0) {
            throw new DivideByMinusException("除数是负数");
       }
       int result = x / y;     // 定义一个变量result记录两个数相除的结果
       return result;           // 将结果返回
   }
}

运行结果:

 

5.6错题整理

***编译异常如果发生,就必须处理,要么捕获,要么抛出;

***编译异常是除了Runtimel Exception 编译时的异常;

***Throwable类是所有异常类的父类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值