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


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

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

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

     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个例子的代码,只有对这种算术运行的异常进行处理,如果我传入的参数个数不对,还有参数的格式也不对,程序是处理不了的。

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

     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 }

    编译运行:

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

  • 相关阅读:
    Linux系统设置中文
    跟着小白学Linux基础命令系列
    Linux小白基础练习题
    htop命令超级好玩用法
    sed命令用法
    Linux三剑客grep命令的使用技巧
    Linux忘记密码如何修改密码
    决心书
    Linux无法上网,ping不通百度的解决方法
    AE 创建shp图层
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/10909419.html
Copyright © 2020-2023  润新知