【从C++到Java一周速成】章节11:异常的处理


异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。

常见异常,例如:
所需文件找不到
网络连接不通或中断
算术运算错(除0)
数组下标越界
装载一个不存在的类或对null对象操作
类型转换异常

Java提供异常处理机制。它将异常处理代码和业务代码分离,使程序更优雅,更好的容错性,高健壮性。

Java 的异常处理通过5个关键字实现:try、catch、finally、throw、throws

【1】try-catch-finally

try-catch执行三种情况:

  1. try块中没有出现异常:
    跳过不执行catch块代码
  2. try块中出现异常,catch块中匹配到对应的异常类型(相同或者父类):
    遇到异常后try块中尚未执行的代码不再执行,Java会生成相应的异常对象,Java系统寻找匹配的catch块,执行catch块代码。程序不会中断,catch块后面的代码正常执行。
  3. try块中出现异常,catch块中异常类型不匹配:
    不执行catch块代码,程序直接中断运行。
    finally中的代码是以上三种情况都会执行的
public class test {
    public static void main(String[] args) {
        try{
            int num1=12;
            int num2=0;
            System.out.println("两个数的商为"+num1/num2);
        } catch (Exception e){
            System.out.println("catch到异常之后会输出");
        }finally
        {
            System.out.println("程序无论是否出现异常都必定执行");
        }
        System.out.println("上面是两个数相除的结果");
    }
}

【2】throw和throws

throw用法

1.人为创造异常对象

public class test2 {
    public static void main(String[] args) {
        devide();
    }
    public static void devide(){
        int num1=12;
        int num2=0;
        if(num2==0){
            try{
                throw new Exception();
            }catch (Exception e) {
                System.out.println("这里的异常我自己处理");
            }
        }else{
            System.out.println("两个数相处的结果是"+num1/num2);
        }
    }
}

2.向外层抛出异常(我自己不处理这个异常,甩锅给别人处理)

public class test2 {
    public static void main(String[] args) {
        try{
            devide();
        }catch(Exception e) {
            System.out.println("devide方法发生异常");
        }
    }
    public static void devide() throws Exception{
        int num1=12;
        int num2=0;
        if(num2==0){
           throw new Exception();
        }else{
            System.out.println("两个数相处的结果是"+num1/num2);
        }
    }
}

throw和throws的区别:

  1. 位置不同
    throw:方法内部
    throws:方法的签名处,方法的声明处
  2. 内容不同
    throw+异常对象
    throws+异常的类型
  3. 作用不同
    throw:异常出现的源头,制造异常
    throws:在方法的声明处,告诉方法调用者,这个方法中可能会出现我声明的这些异常。调用者需要针对这个可能的异常用try-catch进行处理,或者是继续向外抛出。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值