理一理********异常的几种处理方式

整理了一下异常处理的几种方式,写了个小的不能再小的例子说明一下问题:

一,直接抛出异常:(注释写的很清楚)

package javase;

/**
 * 这种情况是抛出异常(throw)
 * 将自然数转换为二进制或八进制字符串
 * @author 幸运皮
 * @param value 需要转换的自然数
 * @param radix 基数,只能取2或8
 * @return 转换后的字符串
 */
public class ThrowEx {
 public  String toString (int value, int radix){
  //判断异常的代码
  if (value < 0){
   throw new IllegalArgumentException ("需要转换的数字不是自然数");
  }
  if (radix != 2 && radix != 8){  //如果radix既不是2也不是8的情况下抛出异常
   throw new IllegalArgumentException ("进制参数非法");
  }
  
  if (value == 0){
   return "0";
  }
  StringBuffer s = new StringBuffer();
  int temp; //余数
  while (value != 0){
   temp = value % radix;  //取余数
   s.insert(0, temp);   //加入字符串的以一个位置
   value = value / radix;  //整除后再赋值给value
  }
  return s.toString();
 }
 public static void main (String[] args){
  ThrowEx thr = new ThrowEx();
  String ss = new String();
  int i = 2;
  ss = thr.toString(2,22);
  System.out.print(ss);
 }

}
二,处理异常:(处理异常有好多种方式,下面一一列举)
下面的这些类都在同一个包中

首先定义了一个异常:

Myexception.java

package javase;
/**
 * 如果提供的异常不够,那么就自定义异常吧
 * @author 幸运皮
 */
/**自定义的异常可以是继承的Exception或者RuntimeException,
如果继承Exception,那这个异常必须要处理的
RuntimeException的,不用强制处理
但是,一般很少自定义异常的
*/
public class MyException extends RuntimeException {
public MyException (){
 super("这里出异常了");
}
}

第一种处理方式:不处理
package javase;
/**
 * 处理异常之"不处理"——不推荐使用
 * 这样,当执行出现异常的时候,就不会输出任何消息
 * @author 幸运皮
 */
public class ChuliEx {
 public static void main(String[] args){ 
  String s = new String("q123");
   try
   {
    int n = Integer.parseInt(s);
    System.out.print(n);
   }
   catch (NumberFormatException e){
    
   }
  }
}

第二种处理方式:直接处理
package javase;
/**
 * 处理异常之"直接处理"——提示用户进行正确的操作,常用的一种处理方式
 * 这样,当执行出现异常的时候,就不会输出任何消息
 * @author 幸运皮
 */
public class ChuliEx2 {
 public static void main(String[] args){ 
  String s = new String("123");
  //String s = new String("p123");
  int n = 0;
   try
   {
     n = Integer.parseInt(s);
    System.out.print(n);
   }
   catch (ArrayIndexOutOfBoundsException e){
    System.out.print("请输入命令行参数"); 
   }
   catch (NumberFormatException e){
    System.out.print("参数不是数字字符");
   }
  }
}

第三种处理方式:重新抛出异常,具体看注释
package javase;
/**
 * 处理异常之"重新抛出处理"——将出现的异常都转换成自己定义的某个异常然后重新抛出
 * 这样比较容易发现异常的位置,利于程序出错时候找错误
 * @author 幸运皮
 */
public class ChuliEx3 {
 public static void main(String[] args){ 
  // String s = new String("123");
  String s = new String("p123");
  int n = 0;
   try
   {
     n = Integer.parseInt(s);
    System.out.print(n);
   }
   catch (ArrayIndexOutOfBoundsException e){
    throw new MyException(); 
   }
   catch (NumberFormatException e){
    throw new MyException(); //这是在同一个包中定义的异常
/**
* public class MyException extends RuntimeException {
      public MyException (){
          super("这里出异常了");
      }
  }
*/
   }
  }
}

第四种处理方式:方法中声明,具体实现时再处理
package javase;
/**
 * 处理异常之"方法中声明异常"——将出现的异常都转换成自己定义的某个异常然后重新抛出
 * @author 幸运皮
 *
 */
public class ChuliEx4 {
 public ChuliEx4(){}
 public void convert(String s) throws NumberFormatException { 
  //一个是在方法里捕获异常
  //其实,完全可以不加throws NumberFormatException 的
  //像下面这样:public void convert(String s){是在具体调用方法的时候获取异常
 
  int n = Integer.parseInt(s);
  System.out.print(n);
}
 public static void main(String[] args){ 
  ChuliEx4 chuli = new ChuliEx4();
  try{
  chuli.convert("q123");
  }
  catch (NumberFormatException e){
   System.out.print("参数传递类型不是数字型字符");
  }
}
}
 

(谢谢武让的提醒,不过,想了一下,后面还有一个IO例子,要用到finally,所以,就不在这添了)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值