
try-catch-finally的使用
发布日期:2021-05-08 23:17:12
浏览次数:18
分类:博客文章
本文共 4464 字,大约阅读时间需要 14 分钟。
/*
* 一、异常的处理:抓抛模型 * * 过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。 * 并将此对象抛出。 * 一旦抛出对象以后,其后的代码就不再执行。 * * 关于异常对象的产生:① 系统自动生成的异常对象 * ② 手动的生成一个异常对象,并抛出(throw) * * 过程二:"抓":可以理解为异常的处理方式:① try-catch-finally ② throws * * * 二、try-catch-finally的使用 * * try{ * //可能出现异常的代码 * * }catch(异常类型1 变量名1){ * //处理异常的方式1 * }catch(异常类型2 变量名2){ * //处理异常的方式2 * }catch(异常类型3 变量名3){ * //处理异常的方式3 * } * .... * finally{ * //一定会执行的代码 * } * * 说明: * 1. finally是可选的。 * 2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象 * 的类型,去catch中进行匹配 * 3. 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的 * try-catch结构(在没有写finally的情况)。继续执行其后的代码 * 4. catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。 * catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错 * 5. 常用的异常对象处理的方式: ① String getMessage() ② printStackTrace() * 6. 在try结构中声明的变量,再出了try结构以后,就不能再被调用 * 7. try-catch-finally结构可以嵌套 * * 体会1:使用try-catch-finally处理编译时异常,是得程序在编译时就不再报错,但是运行时仍可能报错。 * 相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。 * * 体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。 * 针对于编译时异常,我们说一定要考虑异常的处理。 */package com.ch.java1;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import org.junit.Test;public class ExceptionTest1 { @Test public void test2(){ try{ File file = new File("hello.txt"); FileInputStream fis = new FileInputStream(file); int data = fis.read(); while(data != -1){ System.out.print((char)data); data = fis.read(); } fis.close(); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } @Test public void test1(){ String str = "123"; str = "abc"; int num = 0; try{ num = Integer.parseInt(str); System.out.println("hello-----1"); }catch(NumberFormatException e){// System.out.println("出现数值转换异常了,不要着急...."); //String getMessage():// System.out.println(e.getMessage()); //printStackTrace(): e.printStackTrace(); }catch(NullPointerException e){ System.out.println("出现空指针异常了,不要着急...."); }catch(Exception e){//父类异常声明在最下面 System.out.println("出现异常了,不要着急...."); } System.out.println(num); System.out.println("hello-----2"); } }
/*
* try-catch-finally中finally的使用: * * * 1.finally是可选的 * * 2.finally中声明的是一定会被执行的代码。即使catch中又出现异常了,try中有return语句,catch中有 * return语句等情况。 * * 3.像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的 * 释放。此时的资源释放,就需要声明在finally中。 */public class FinallyTest { @Test public void test2(){ FileInputStream fis = null; try { File file = new File("hello1.txt"); fis = new FileInputStream(file); int data = fis.read(); while(data != -1){ System.out.print((char)data); data = fis.read(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try {// try-catch-finally结构可以嵌套 if(fis != null) fis.close(); } catch (IOException e) { e.printStackTrace(); } } } @Test public void testMethod(){ int num = method(); System.out.println(num); } public int method(){ try{ int[] arr = new int[10]; System.out.println(arr[10]); return 1; }catch(ArrayIndexOutOfBoundsException e){ e.printStackTrace(); return 2; }finally{ System.out.println("我一定会被执行"); return 3; } } @Test public void test1(){ try{ int a = 10; int b = 0; System.out.println(a / b); }catch(ArithmeticException e){ e.printStackTrace(); // int[] arr = new int[10];// System.out.println(arr[10]); }catch(Exception e){ e.printStackTrace(); }// System.out.println("我好帅啊!!!~~"); finally{ System.out.println("我好帅啊~~"); } } }
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月07日 10时13分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java内存模型(JMM)
2019-03-06
AQS相关
2019-03-06
WCF学习之旅—第三个示例之一(二十七)
2019-03-06
java ThreadPoolExecutor初探
2019-03-06
快速指数算法
2019-03-06
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2019-03-06
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2019-03-06
Spring 框架基础(01):核心组件总结,基础环境搭建
2019-03-06
Cassandra数据建模
2019-03-06
Internet Explorer 10 专题上线
2019-03-06
云计算之路-阿里云上:0:25~0:40网络存储故障造成网站不能正常访问
2019-03-06
网站故障公告1:使用阿里云RDS之后一个让人欲哭无泪的下午
2019-03-06
上周热点回顾(6.3-6.9)
2019-03-06
上周热点回顾(8.12-8.18)
2019-03-06
【故障公告】升级阿里云 RDS SQL Server 实例故障经过
2019-03-06
蹒跚来迟:新版博客后台上线公测
2019-03-06
[网站公告]11月26日00:00-04:00阿里云RDS升级
2019-03-06
[网站公告]又拍云API故障造成图片无法上传(已恢复)
2019-03-06
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
2019-03-06
上周热点回顾(6.9-6.15)
2019-03-06