第2课第5节_Java面向对象编程_异常_P【学习笔记】

摘要:韦东山android视频学习笔记

java的异常处理的原则如下:

第2课第5节_Java面向对象编程_异常_P【学习笔记】

1、我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问题,程序也不能往下执行(只打印了Begin of div)

1 public class Div{
 2
 3     public static void main(String args[]){
 4         int m = Integer.parseInt(args[0]);
 5         int n = Integer.parseInt(args[1]);
 6
 7         System.out.println("Begin of div");
 8         int r = div(m,n);
 9         System.out.println("end of div");
10
11         System.out.println(m+"/"+n+"="+r);
12     }
13
14     public static int div(int m,int n){
15         int r = m / n;
16         return r;
17     }
18 }

编译运行:

第2课第5节_Java面向对象编程_异常_P【学习笔记】

2、我们先写一个有对异常进行处理程序(自己处理异常),根据下面的运行结果,程序可以捕获到异常并且可以正常的执行.

1 public class Div2{
 2
 3     public static void main(String args[]){
 4         int m = Integer.parseInt(args[0]);
 5         int n = Integer.parseInt(args[1]);
 6
 7         System.out.println("Begin of div");
 8         int r = div(m,n);
 9         System.out.println("end of div");
10
11         System.out.println(m+"/"+n+"="+r);
12     }
13
14     public static int div(int m,int n){
15         int r = 0;
16         try {
17             r = m / n ;
18         }catch (ArithmeticException e){
19             System.out.println(e);
20         }finally{
21             System.out.println("This is finally of div");
22         }
23
24         return r;
25     }
26 }

编译运行:

3、我们写一个程序将异常抛出的类,这个抛出的异常是由main进行处理.

1 public class Div4{
 2
 3     public static void main(String args[]){
 4         int m = Integer.parseInt(args[0]);
 5         int n = Integer.parseInt(args[1]);
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             r = div(m,n);
11         }catch (ArithmeticException e){
12             System.out.println(e);
13         }
14         System.out.println("end of div");
15
16         System.out.println(m+"/"+n+"="+r);
17     }
18
19     public static int div(int m,int n) throws ArithmeticException{
20         int r = 0;
21
22         r = m / n ;
23
24         return r;
25     }
26 }

编译运行:

4、如果在类的方法中如果处理了异常,那样在main方法中就不会对异常进行处理.

1 public class Div5{
 2
 3     public static void main(String args[]){
 4         int m = Integer.parseInt(args[0]);
 5         int n = Integer.parseInt(args[1]);
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             r = div(m,n);
11         }catch (ArithmeticException e){
12             System.out.println(e);
13         }
14         System.out.println("end of div");
15
16         System.out.println(m+"/"+n+"="+r);
17     }
18
19     public static int div(int m,int n) throws ArithmeticException{
20         int r = 0;
21
22         try{
23             r = m / n ;
24         }catch(ArithmeticException e){
25             System.out.println("div :"+e);
26         }
27
28         return r;
29     }
30 }

编译运行:

5、如果在类的方法中如果处理了异常,同时在类方法中把异常抛出,那样main方法也可以捕获到异常.

1 public class Div6{
 2
 3     public static void main(String args[]){
 4         int m = Integer.parseInt(args[0]);
 5         int n = Integer.parseInt(args[1]);
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             r = div(m,n);
11         }catch (ArithmeticException e){
12             System.out.println(e);
13         }
14         System.out.println("end of div");
15
16         System.out.println(m+"/"+n+"="+r);
17     }
18
19     public static int div(int m,int n) throws ArithmeticException{
20         int r = 0;
21
22         try{
23             r = m / n ;
24         }catch(ArithmeticException e){
25             System.out.println("div :"+e);
26             throw e;
27         }
28
29         return r;
30     }
31 }

编译运行:

6、现在我们上面第5个例子的代码,只有对这种算术运行的异常进行处理,如果我传入的参数个数不对,还有参数的格式也不对,程序是处理不了的。

第2课第5节_Java面向对象编程_异常_P【学习笔记】

为了修复上述的问题,我们添加对传入参数格式不对,还有传入参数个数不对这两种异常的处理。

1 public class Div7{
 2
 3     public static void main(String args[]){
 4         int m = 0;
 5         int n = 0;
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             m = Integer.parseInt(args[0]);
11             n = Integer.parseInt(args[1]);
12             r = div(m,n);
13         }catch (ArithmeticException e){
14             System.out.println("main :" + e);
15         }catch (NumberFormatException e){
16             System.out.println("main :" + e);
17         }catch (ArrayIndexOutOfBoundsException e){
18             System.out.println("main :" + e);
19         }
20         System.out.println("end of div");
21
22         System.out.println(m+"/"+n+"="+r);
23     }
24
25     public static int div(int m,int n) throws ArithmeticException{
26         int r = 0;
27
28         try{
29             r = m / n ;
30         }catch(ArithmeticException e){
31             System.out.println("div :"+e);
32             throw e;
33         }
34
35         return r;
36     }
37 }

编译运行结果

7、在第6个例子继续优化,上面的程序目前只能对算术运算、参数格式还有参数个数不对的异常进行处理,其他的情况是无法处理的到的,我们可以添加对这些异常的父类RuntimeException来捕获异常.

1 public class Div8{
 2
 3     public static void main(String args[]){
 4         int m = 0;
 5         int n = 0;
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             m = Integer.parseInt(args[0]);
11             n = Integer.parseInt(args[1]);
12             r = div(m,n);
13         }catch (ArithmeticException e){
14             System.out.println("main :" + e);
15         }catch (NumberFormatException e){    //去掉了参数个数的异常,仍然可以捕获到
16             System.out.println("main :" + e);
17         }catch (RuntimeException e){
18             System.out.println("main :" + e);
19         }
20         System.out.println("end of div");
21
22         System.out.println(m+"/"+n+"="+r);
23     }
24
25     public static int div(int m,int n) throws ArithmeticException{
26         int r = 0;
27
28         try{
29             r = m / n ;
30         }catch(ArithmeticException e){
31             System.out.println("div :"+e);
32             throw e;
33         }
34
35         return r;
36     }
37 }

编译运行结果

8、对于”不可查异常”, 系统也会抛出它,写不写throws效果一样

1 public class Div9{
 2
 3     public static void main(String args[]){
 4         int m = 0;
 5         int n = 0;
 6         int r = 0;
 7
 8         System.out.println("Begin of div");
 9         try {
10             m = Integer.parseInt(args[0]);
11             n = Integer.parseInt(args[1]);
12             r = div(m,n);
13         }catch (ArithmeticException e){
14             System.out.println("main :" + e);
15         }catch (NumberFormatException e){
16             System.out.println("main :" + e);
17         }catch (RuntimeException e){
18             System.out.println("main :" + e);
19         }
20         System.out.println("end of div");
21
22         System.out.println(m+"/"+n+"="+r);
23     }
24
25     //public static int div(int m,int n) throws ArithmeticException{
26     public static int div(int m,int n){
27         int r = 0;
28
29         try{
30             r = m / n ;
31         }catch(ArithmeticException e){
32             System.out.println("div :"+e);
33             throw e;
34         }finally{
35             System.out.println("finally of div");
36         }
37
38         return r;
39     }
40 }

编译运行:

第2课第5节_Java面向对象编程_异常_P【学习笔记】

相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask

Original: https://www.cnblogs.com/zzb-Dream-90Time/p/10909419.html
Author: 请给我倒杯茶
Title: 第2课第5节_Java面向对象编程_异常_P【学习笔记】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539145/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 云原生系列2 部署你的第一个k8s应用

    云原生的概念和理论体系非常的完备,but talk is cheap , show me the code ! 但是作为一名程序员,能动手的咱绝对不多BB,虽然talk并不chea…

    Java 2023年6月8日
    071
  • Java项目实战——瑞吉外卖Day02

    1、完善登录功能 问题分析 前面我们已经完成了后台系统的员工登录功能开发,但是还存在一个问题:用户如果不登录,直接访问系统首页面,照样可以正常访问。 这种设计并不合理,我们希望看到…

    Java 2023年5月29日
    073
  • 面试必备:ThreadLocal详解

    前言 大家好,我是 捡田螺的小男孩。 无论是 工作还是面试,我们都会跟 ThreadLocal打交道,今天就跟大家聊聊 ThreadLocal哈~ ThreadLocal是什么?为…

    Java 2023年6月5日
    087
  • 接口访问频率限流

    快速开始:四、代码实现 -> 6.配置RateLimit注解,使限流生效 一、限流场景 淘宝秒杀活动,限1小时200件商品 一个用户、一个手机号一天只能获取5次验证码 限制某…

    Java 2023年6月15日
    055
  • 好书推荐之《深入理解计算机系统》

    大佬推荐 首先推荐的是翻译版图书《深入理解计算机系统》,原书名为《Computer Systems A Programmer’s Perspective》。不过,这本书…

    Java 2023年6月15日
    083
  • consul上注册的服务出现红叉的解决方案

    问题描述 解决方案:打开心跳机制 ###consul服务端口号 ser…

    Java 2023年6月15日
    084
  • nginx rewrite基本用法

    rewrite支持使用 if,set,正则,文件和目录判断 正则表达式匹配: 符号 说明 = 等值的比较 ~ 与指定正则表达式模式匹配,区分字符大小写 ~* 与指定正则表达式模式匹…

    Java 2023年5月30日
    075
  • spring 文件上传解析器

    需要导入 commons-fileupload 和commons-io包配合使用 <bean id="multipartResolver" class=&…

    Java 2023年6月7日
    076
  • Java并发编程艺术系列-三、Java内存模型

    三、Java内存模型 本章大致分四个部分: Java内存模型的基础:主要介绍内存模型相关的基本概念; Java内存模型中的顺序一致性:主要介绍重排序与顺序一致性内存模型; 同步原语…

    Java 2023年6月9日
    076
  • 微信扫码登录

    微信登录之前还需要了解OAuth2知识 前期准备 注册微信开放平台 邮箱激活 完善开发者资料(暂不支持个体用户) 开发者资质认证: &#x8425;&#x4E1A;…

    Java 2023年6月13日
    090
  • web项目访问引用jar内部的静态资源

    一、实现原理 在Servlet3协议规范中,包含在JAR文件 /META-INFO/resources/路径下的资源可以直接访问。 二、举例说明 如下图所示,是我新建的一个Spri…

    Java 2023年6月15日
    081
  • SystemVerilog(6):线程通信

    1、线程 线程即独立运行的程序。 线程需要被触发,可以结束或者不结束。 在 module 中的 initial 和 always,都可以看做独立的线程,它们会在仿真 0 时刻开始,…

    Java 2023年5月30日
    089
  • 这样的阅读工具,人手一个不过分吧?

    无意间被同事看到,惊呼,你是怎么在网页上做标记的? 这其实是我个人浏览网页,每日浏览大量信息,从中标记重要信息必备的工具 个人痛点 每日要浏览很多网页或者查阅资料,浏览过后重新定位…

    Java 2023年6月7日
    081
  • linux监控文件夹内的文件数量

    开发的时候遇到一个问题,服务器一旦重启,项目生成的文件就丢失了,感觉很莫名其妙..一开始猜测是文件流没有关闭,检查了代码,感觉没毛病.于是先看看是关机丢失了文件还是开机被删除了.下…

    Java 2023年6月16日
    076
  • 设计模式之策略模式

    策略模式的作用 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。 为什么要使用策略模式? 我们想象一下最常见的场景:排序。排序无非两种选择,…

    Java 2023年6月6日
    081
  • JDK新特性(总索引)

    前言 目录 posted @2021-08-01 11:46 侯小厨 阅读(62 ) 评论() 编辑 Original: https://www.cnblogs.com/houzh…

    Java 2023年5月30日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球