为什么在使用 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
所以这个抛出表明当这个方法被调用时必须被处理
我用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
所以这个抛出表明当这个方法被调用时必须被处理