我用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");
}
或在主方法
的开头添加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?
答案 0 :(得分:2)
这与您实际获得异常无关。但是你的String可能是错误的格式(事实并非如此)。在这种情况下,你会得到一个例外。
因此编译器希望您处理该异常。你要么必须重新抛出它,要么抓住它。但是:您实际上没有使用您的代码获得异常。这是为了防万一有异常。
答案 1 :(得分:0)
在任何 IDE (集成开发环境)中,编辑器会显示在编译时未解析的编译类型错误。
您正在观察IDE在您的情况下的行为,sdf.parse(d);
意味着它可以在运行时抛出一个解析异常,因此您必须按顺序处理它。否则程序将崩溃。
在你的第二个代码段中,它会在发生时捕获一个解析异常,并为您的记录显示异常e.printStackTrace();
,代码不会崩溃,即exit(0)
或exit(1)
错误,more
在你的最后一段代码片段中,方法已经被删除,它可能会抛出异常,所以如果它从任何其他来源调用,应该处理,比如try catch。
您可以使用这两种解决方案中的任何一种,只是您的选择。
更多强>
以下是SimpleDateFormat
public Date parse(String source) throws ParseException
所以这个抛出表明当调用这个方法时必须处理