我对 java 和 try catch block 处理异常的想法还很陌生。
这大致就是我要结束的,而且必须有更好的方法:
try {
JSONObject jsonObject = new JSONObject(jsonString);
int aCount = jsonObject.getInt("acount");
String devTok = jsonObject.getString("dt");
String qURL = jsonObject.getString("qu");
try {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key qKey = KeyFactory.createKey("qu", qURL);
int dsACount = (Integer) datastore.get(qKey).getProperty(kLastKnownANumber);
//..etc.. more try catch blocks needed
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
} catch (com.google.appengine.repackaged.org.json.JSONException e) {
e.printStackTrace();
}
以同样的方式嵌入了更多的try catch block ,所以最后只有一堆catch block 。还应该如何处理异常,Eclipse 不断要求我用 try catch block 包围或“添加抛出声明”。
有时候我想捕获某些异常,比如如果它找不到一个实体,我想打印类似“找不到实体”的东西,如果JSON字符串不能被解析成一个对象,我想要打印类似“无法解析 JSON”的内容。
(我习惯了 objective-c,其中有失败的委托(delegate)方法,或者该方法返回 null 并且你已经传递了一个指向 [指向] NSError 对象的指针,该对象将被“填充”,是有什么地方可以学习 try-catch 吗?)
最佳答案
如果您所做的只是捕获它们并打印堆栈跟踪而不考虑异常类型,您可以将代码包装在一个大的 try/catch block 中。要节省许多“捕获”,您可以捕获java.lang.Throwable
,这是所有异常实现的接口(interface)。如果没有,您可以捕获您正在调用的代码抛出的每种类型的已检查异常,并专门处理它们。
Eclipse 一直要求您这样做,因为如果检查的异常没有被捕获,或者被调用者声明为抛出,Java 代码将不会编译。
+将此评论添加到答案中(感谢 Paul Tomblin):
在生产质量的应用程序中,您将记录跟踪,在您以正确方式处理异常的地方添加一些逻辑,采用备用流程,和/或将其重新包装在另一个异常中并抛出它,等等. 这完全取决于您要解决的特定问题。
关于java - 如何避免在 Java 中有很多 try catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589489/