2022.01.13Java异常处理

2022.01.13每日总结

1.异常处理习题:

编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入负数,计算 两数相除。

对 数 据 类 型 不 一 致 (NumberFormatException) 、 缺 少 命 令 行 参 数 (ArrayIndexOutOfBoundsException、

除0(ArithmeticException)及输入负数(EcDef 自定义的异常)进行异常处理。 

提示: (1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。

(2)在main()方法中使用异常处理语句进行异常处理。

(3)在程序中,自定义对应输入负数的异常类(EcDef)。

(4)运行时接受参数 java EcmDef 20 10 //args[0]=“20” args[1]=“10” (5)Interger类的static方法parseInt(String s)将s转换成对应的int值。 如:int a=Interger.parseInt(“314”); //a=314;

题解:

 

//第一步:自定义异常类
//
提供序列版本号 //继承现有的异常结构 //提供构造器 public class EcDef extends RuntimeException{ static final long serialVersionUID = -7034897190745712139L; public EcDef(){ } public EcDef(String message){ super(message); } }

 


//第二步:编写EcmDef主类:
public class EcmDef {
     public static void main(String[] args) {
          try {
               int j = Integer.parseInt(args[1]);
               int i = Integer.parseInt(args[0]);
               int result = ecm(i,j);

               System.out.println(result);

          }catch (NumberFormatException e){
               System.out.println("数据类型不一致");
          }catch (ArrayIndexOutOfBoundsException e){
               System.out.println("缺少命令行参数");
          }catch (ArithmeticException e){
               System.out.println("除0");
          }catch (EcDef e){
               System.out.println(e.getMessage());
          }
     }

     public static int ecm(int i,int j) throws EcDef{
          if(i<0 || j <0){
               throw new EcDef("分子或分母为负数了!");
          }
          return i/j;
     }
}

 

2.Java的runconfiguration

Java的runconfiguration是指Java的运行配置,Java程序启动时即可为程序添加参数,

public class Test{
    public static void main (String[] args){
          System.out.println(args[0]);
          System.out.println(args[1]);
          System.out.println(args[2]);
    }
}

该程序需在启动时传递设置参数,输出如下:

D:\> java Test aaa bbb ccc

aaa

bbb

ccc

eclipse和idea可在程序启动前设置参数,打开runconfiguration把111 222 333填入Program arguments中再运行即可

 

 

 

3.异常处理机制:

①try 捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现 异常的代码放在try语句块中。

catch (Exceptiontype e) 在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随 一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可 以用其父类作为catch的参数。

比 如 : 可 以 用 ArithmeticException 类 作 为 参 数 的 地 方 , 就 可 以 用 RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。 但不能是与ArithmeticException类无关的异常,如NullPointerException(catch 中的语句将不会执行)。

finally 捕获异常的最后一步是通过finally语句为异常处理提供一个 统一的出口,使得在控制流转到程序的其它部分以前,能够 对程序的状态作统一的管理。 

不论在try代码块中是否发生了异常事件,catch语句是否执 行,catch语句是否有异常,catch语句中是否有return, finally块中的语句都会被执行。

finally语句和catch语句是任选的

 ②声明抛出异常是Java中处理异常的第二种方式 

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这 种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理, 而由该方法的调用者负责处理。 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可 以是方法中产生的异常类型,也可以是它的父类。 

声明抛出异常举例:

public void readFile(String file) throws FileNotFoundException {
……
// 读文件的操作可能产生FileNotFoundException类型的异常
FileInputStream fis = new FileInputStream(file);
..……
}

 

4.throws和throw的区别

     public static int ecm(int i,int j) throws EcDef{
          if(i<0 || j <0){
               throw new EcDef("分子或分母为负数了!");
          }
          return i/j;
     }
}

使用位置不一样,

一个是方法声明后面,表示向上抛出异常直至main方法,由调用者处理;不一定发生

一个是方法体内跟的是异常对象名,由方法体内的语句处理;一定发生

 

posted @ 2022-01-14 00:28  Fancy[love]  阅读(57)  评论(0编辑  收藏  举报