try-catch结构的理解与使用

try-catch结构的理解与使用(finally是可选的)

finally在何时使用以及如何使用详情请见 https://blog.csdn.net/m0_53777734/article/details/115316849

package com.yichang.bean;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
* 一、什么是异常处理
*    将异常处理的程序代码集中在一起,于正常的程序代码分开,使得程序简洁、优雅、并易于维护
*
*
* 二、为什么要使用异常处理
*    在编写程序时,经常要在可能出现错误的地方加上检测的代码,比如进行x/y 运算时,要
*    检测分母是否为0,数据为空,输入的不是数据而是字符等。过多的if-else分支会导致程
*    序的代码加长、臃肿、可读性差。因此采用异常处理机制
*
*
*三、如何使用异常处理
*
* 1、异常的处理,抓抛模型
*   过程一:“抛”:程序正在执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象
*               并将此对象抛出。
*               一旦抛出对象以后,其后代码就不再执行。
*   过程二:“抓”:可以理解为异常的处理方式:①try-catch-finally
*                                    ②throws
* 2、try-catch-finally的使用
*
* try{
*      //可能出现的异常
*    }catch(异常类型1 变量名1){
*         //处理异常的方式1
*    }catch(异常类型2 变量名2){
 *         //处理异常的方式2
 *   }catch(异常类型3 变量名3){
 *         //处理异常的方式3
 *    }
 *   ...
 *   finally{
 *         //一定会执行的代码
 *    }
 *
 * 注意:
 *     ①finally时可选的(相当于switch-case结构中的default是可选的)
 *     ②使用try将可能出现异常的代码包装起来,在执行的过程中,一旦出现异常,就会生成一个对应异常类的
 *       对象,根据此对象的类型,去catch中进行匹配
 *     ③一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理,一旦处理完成,就跳出
 *       当前的try-catch结构(在未写finally的情况下,如果写finally,则一定会执行finally里的代码)
 *       继续执行其后的代码
 *     ④catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下,都可
 *                       如果有子父类关系,则要求子类一定声明在父类的下面
 *     ⑤常用的异常处理的方式:
 *                         ①String gerMessage();
 *                         ②printStackTrace();
 *     ⑥在try结构中声明的变量,在出了try结构以后,就不能再被调用
 * 3、try-catch-finally中finally的使用
 *    祥见
 * 4/try-catch-finally是可以嵌套的
 *
 *说明:①使用try-catch-finally结构处理编译时异常时,使程序在编译时不报错,但是在运行时仍会报错
 *     相当于把一个编译时可能出现的异常,延迟到运行时出现
 *     ②由于运行时异常比较常见,所以我们通常不针对运行时异常写try-catch-finally结构,但是针对
 *      编译时的异常,我们一定要考虑异常处理,因为如果不处理,编译都无法通过,更不要说运行了
 * */
public class Exception extends Throwable {
    public static void main(String[] args) {
        Exception e = new Exception();
        e.test2();
    }
    public void test(){
        String str = "abc";
        int num = 0;
        try{
            num = Integer.parseInt(str);
            //由注意点②③的知识可知,此时出现的错误被下面捕获,
            //后便跳出了此结构,所以 “hello-------1” 不能被执行
            System.out.println("hello---------1");
        }catch(NumberFormatException e){
            System.out.println("此处出现数值转换异常");
            System.out.println(e.getMessage());//常用的处理方式①
            e.printStackTrace();//常用的处理方式②
        }catch(NullPointerException e){
            System.out.println("出现空指针异常");
        }
        System.out.println("hello---------2");
        System.out.println(num);//如果想用num,就要再大括号外面声明,且要初始化

    }

    //体会:使用try-catch-finally处理编译时异常,使得程序再编译时就不再报错,但是运行时仍可能报错
//         相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时才出现
    public void test2() {
        try {
            File file = new File("hello.text");
            FileInputStream fis = new FileInputStream(file);
            int data = fis.read();
            while (data != -1) {
                System.out.println((char) (data));
                data = fis.read();
            }
            fis.close();
        } catch (IOException e){
            e.printStackTrace();
        } finally{
            System.out.println("一定会被执行的代码");
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值