Java的异常

一、什么是异常处理

Java编程语言使用异常处理机制为程序提供了错误处理的能力

 

二、Java中如何进行异常处理

1、异常处理的5个关键字

  • 捕获异常
    • try:执行可能产生异常的代码
    • catch:捕获异常
    • finally:无论是否发生异常,代码总能执行
  • 声明异常
    • throws:声明方法可能要抛出的各种异常
  • 抛出异常
    • throw:手动抛出异常

2、try-catch

try块中所有语句正常执行完毕,不会发生异常,那么catch块中的所有语句都将会被忽略

public void method(){
    try {
        // 代码段(此处不会产生异常)
    } catch (异常类型 变量名) {
        // 对异常进行处理的代码段
    }
    // 代码段
}

try语句块在执行中遇到异常,那么在try块中其余剩下的代码都将被忽略,系统会自动生成相应的异常对象,如果这个异常对象与catch中声明的异常类型相匹配,则相应的catch块将会被执行

public void method(){
    try {
        // 代码段 1
        // 产生异常的代码段 2
        // 代码段 3
    } catch (异常类型 ex) {
        // 对异常进行处理的代码段4
    }
    // 代码段5
}

代码执行顺序:代码段1-->产生异常的代码段2-->catch语句-->对异常进行处理的代码段4-->代码段5

try语句块在执行中遇到异常,如果这个异常对象与catch中声明的异常类型不匹配,程序会中断。

public void method(){
    try {
        // 代码段 1
        // 产生异常的代码段2
        // 代码段 3
    } catch (异常类型 ex) {
        // 对异常进行处理的代码段4
    }
    // 代码段5
}

 代码执行顺序:代码段1-->产生异常的代码段2-->catch语句(不匹配)

多重catch块

public void method(){
    try {
        // 代码段
        // 产生异常(异常类型2)
    } catch (异常类型1 ex) {
        // 对异常进行处理的代码段
    } catch (异常类型2 ex) {
        // 对异常进行处理的代码段
    } catch (异常类型3 ex) {
        // 对异常进行处理的代码段
    }
        // 代码段
}

3、try-catch-finally

存在return的try-catch-finally块

public void method(){
    try {
        // 代码段 1
        // 产生异常的代码段 2
    } catch (异常类型 ex) {
        // 对异常进行处理的代码段3
        return;
    }finally{
        // 代码段 4
    }
}

代码执行顺序:代码段1-->产生异常的代码段2-->catch语句-->对异常进行处理的代码段3-->代码段4-->return

try-catch- finally块中, finally块唯一不执行的情况

public void method(){
    try {
        // 代码段 1
        // 产生异常的代码段 2
    } catch (异常类型 ex) {
        // 对异常进行处理的代码段3
        System exit(1);
    }finally{
        // 代码段 4
    }
}

代码执行顺序:代码段1-->产生异常的代码段2-->catch语句-->对异常进行处理的代码段3-->System exit(1)

System exit(1)作用为:关闭Java虚拟机

4、throws

throws的用法

  • Java语言中通过关键字throws声明某个方法可能抛出的各种异常。
  • throws可以同时声明多个异常,多个异常用逗号隔开。

throws声明的异常,然后处理异常的方法

  • 调用者通过try-catch捕获并处理异常。
  • 调用者通过throws继续声明异常。如果调用者不打算处理该异常,则可以继续通过throws声明异常,让上一级调用者处理异常。
  • main()方法声明的异常将由Java虚拟机来处理。
public class Test7 {
    public static void divide() throws Exception {
        //可能出现异常的代码
    }
    // 方式1:调用者处理异常
    public static void main(String[] args) {
        try {
            divide();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 方式2:调用者继续声明异常 
    /*public static void main(String[] args) throws Exception {
            divide();
    }*/
}

声明异常,多个异常用逗号隔开-->方式1:调用者处理异常

main方法声明的异常由Java虚拟机处理

throws与throw同时存在

        throw不能单独存在

        throws可以单独存在,但单独存在时无意义

5、throw

public class Person {
	private String name = "";   // 姓名
	private int age = 0;        // 年龄
	private String sex = "男";  // 性别
	public void setSex(String sex) throws Exception {
		if ("男".equals(sex) || "女".equals(sex))
			this.sex = sex;
		else {
            // 抛出异常
			throw new Exception(“性别必须是\"男\"或者\"女\"!");
		}
	}
}

6、throw和throws的区别

作用不同
        throw用于在程序中抛出异常; throws用于声明在该方法内抛出了异常。

使用的位置不同
        throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表后面,不能单独使用。

内容不同
        throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。

7.异常处理原则

异常处理与性能

异常只能用于非正常情况

不要将过于庞大的代码块放在try中

在catch中指定具体的异常类型

需要对捕获的异常做处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值