public static Date strToDate(String dateStr, String dateFormat){
//    if(dateStr == null || "".equals(dateStr))
//      
//    if(dateFormat == null || "".equals(dateFormat))
//      
    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
    Date date;
    try {
       date = sdf.parse(dateStr);
       
    }
    catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
    return date;
  }
如上述代码,关于异常的出来有几个疑问
1. dateStr不合要求,是否抛出异常,不抛在date = sdf.parse(dateStr);也会捕获
2. dateFormat一样
3. catch 之后抛出异常跟返回null问题这个工具函数如果抛出异常,调用时都要try不太方便。针对java何时该抛出异常,是否是在无法预测的地方抛出异常,还是像dateStr可以判断的也抛出异常???

解决方案 »

  1.   

    你如果捕获异常是为了对异常进行处理(如:显示自定义的错误信息;等等),那就捕获,不过不需要这种处理,能不捕获就不捕获(当然有方法强制你捕获异常)。
    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Date date = null;//null
        try {
           date = sdf.parse(dateStr);
           
        }
        catch (ParseException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
           
          //return null;
        }
        return date;
      

  2.   

    不同的情况需要不同的处理流程。1、假设用户在界面上输入一个代表日期的字符串,再调用楼主的函数转化为日期。那么按照逻辑来说,如果字符串格式不对,系统应该提醒用户:日期格式不正确。
    2、假设用户试图打开一条记录,记录中包含一个格式不正确的日期字符串,那么这时候系统可以拒绝打开记录:“记录存在错误!”,也可以继续打开记录,并提示用户:“记录存在部分错误:开始日期格式不正确”。
    3、假设用户试图导入数据到系统中,某条记录包含一个格式不正确的日期字符串,那么这时候系统可以取消导入,也可以忽略该条记录继续导入,完成后再给出结果:“第 X 行记录导入失败:日期格式不正确”。所以,很难说有什么统一的原则来处理楼主的这个方法,这都要根据具体的需要来决定。楼主可能需要对更高层的业务逻辑进行调整,以使其能够以合理的处理这个异常。返回 null 也不失为一种处理方式:当调用者收到 null 时,它就应该知道转换失败了。
      

  3.   

    1.dateStr不合要求会抛出ParseException 
    2.也会
    3,打出堆栈信息,并且返回的日期是null,也就是你没有成功的把date转换成string