为什么在使用 SimpleDateFormat 时出现 ParseException

why the ParseException appears when use SimpleDateFormat

我用eclipse写了下面的代码:

String d = "2014-6-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
Date date =sdf.parse(d);        
System.out.print(date);

并且第 4 行抛出一个 Unhandled exception type ParseException.

但是如果我写:

try {
  String d = "2014-6-1 21:05:36";   
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
  Date date =sdf.parse(d);      
  System.out.print(date);
} catch(ParseException e) {
  e.printStackTrace();
  System.out.print("you get the ParseException");
}

或者在main方法的开头加上throws ParseException

public static void main(String[] args) throws ParseException {
  String d = "2014-6-1 21:05:36";
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
  Date date =sdf.parse(d);      
  System.out.print(date);
}

它们都运行良好...我的代码有什么问题?我在 catch 块中使用方法 printStackTrace(),但为什么我看不到 ParseException?

这与您实际遇到异常无关。但是您的 String 格式可能错误(事实并非如此)。在那种情况下你会得到一个例外。

因此编译器希望您处理该异常。你要么必须重新抛出它,要么抓住它。但是:您的代码实际上不会出现异常。以防万一出现异常。

在任何IDE(集成开发环境)中,编辑器显示编译时无法解决的编译类型错误。

你在你的案例中观察到 IDE 的行为,在 sdf.parse(d); 意味着它可以在运行时抛出解析异常,所以你必须相应地处理它。否则程序会崩溃。

在你的第二个代码片段中,它会在发生时捕获一个解析异常并向你显示异常 e.printStackTrace(); 作为你的记录并且代码不会崩溃,即 exit(0)exit(1) 有错误,more

虽然在您的最后一个代码片段中,方法已被清除,它可能会抛出异常,因此如果它从任何其他来源调用,则应该进行处理,比如 try catch。

您可以使用这两种解决方案中的任何一种,这只是您的选择。

更多

以下是SimpleDateFormat

中的方法签名
public Date parse(String source) throws ParseException

所以这个抛出表明当这个方法被调用时必须被处理