Tag: exception处理

为什么用户定义的exception类在java中是首选/重要的?

当我们在Java中有系统定义的exception类时,为什么需要创建用户定义的exception类? 因为我的老师告诉我在我的项目中制作exception课程。 任何精心制作的例子都会很好。

默认情况下打印出命令行java应用程序中未处理的exception在哪里? 对stdout或stderr?

标题包含整个问题。 我还要感谢提供答案的文档链接。

将检查的exception作为RuntimeException抛出会导致什么问题?

我有一段代码在JSON字符串中编码某种业务数据: public String encodeDataAsJsonString(Data data) throws JSONException { JSONObject o = new JSONObject(); o.put(“SomeField1”, data.getSomeProperty1()); o.put(“SomeField2”, data.getSomeProperty2()); … return o; } 事情是: JSONException是一个经过检查的exception,但是 我真的不知道如何在编译时处理它。 如果真的发生了JSONException,它可能是代码中的一个错误,应该由已经存在的常规“全局未捕获exception处理程序”(例如这个 )处理,并且已经执行了所有必要的日志记录和清理。 因此,我最终在调用方法中执行此操作: … try { encoded = encodeDataAsJsonString(data); } catch (JSONException e) { throw new RuntimeException(e); } … throws JSONException向调用堆栈中的每个方法添加throws JSONException似乎是一个小恶魔。 但是,它仍然感觉很脏,因此我的问题是: 如果我想要一些特定的检查exception去“常规未经检查的exception路由”,是否将它重新抛出为RuntimeException使用的正确习惯用法?

最后在exception处理中

exception处理中的finally块究竟执行了什么?

Javaexception处理 – 样式

从历史上看,我总是编写我的exception处理代码,如下所示: Cursor cursor = null; try { cursor = db.openCursor(null, null); // do stuff } finally { if (cursor != null) cursor.close(); } 但最近,出于可读性和懒惰的原因,我已经开始这样做了: Cursor cursor = db.openCursor(null, null); try { // do stuff } finally { cursor.close(); } 从try-catch-finally块中分配游标(jdbc句柄,无论如何)是错误的吗? 除非JVM真正炸毁了任务,或者在任务块中的任务和第一行之间,我不确定我的旧样式是否提供任何额外的值,第二个肯定更具可读性和简洁性。 文献通常总是采用第一种风格。 编辑 – 假设我很高兴openCursor抛出的任何exception,同时初始化光标不会被捕获到这段代码中,我唯一关心的是如果分配和打开光标则关闭光标。 还假设我正在测试空值等等.. yadda … yadda …(我已经改变了示例以反映这一点,它不是我的问题的焦点所以我没有将它包含在第一版)

在Java中拯救吞噬的exception

一些第三方图书馆吞下了一个例外: String getAnswer(){ try{ // do stuff, modify instance state, maybe throw some exceptions // … return computeAnswer(); }catch (SomeException e){ return null; } } 我想把它改成: String getAnswer() throws SomeException{ // do stuff, modify instance state, maybe throw some exceptions // … return computeAnswer(); } 我不能,因为库已经打包成一个jar子。 那么,有没有办法将exception带回来? 我不需要重新抛出,带有exception的堆栈跟踪和消息也可以工作。 我认为反思在这里没有帮助,也许Unsafe ? 是的我知道我可以使用调试器来查明发生了什么,但如果我在运行时需要exception以进行日志记录和那样的东西,这将不会非常有用

在struts xml中声明/处理哪些exception

Java中有Checked和Unchecked exceptions 。 由于我是Struts2新手,因此我对处理已checked exception有一个愚蠢的怀疑。 我们编写try catch block来处理已checked exceptions 。 因此,我们可以在catch block编写return语句并return view显示Exception / Error的页面return view名称。 如果我抛出在struts.xml文件中声明的checked exception并且结果是重定向到Error / Exception页面怎么办? 这两种方法都是检查exception的正确方法吗?

orElse-Branch中的可选抛出exception

所以我正在使用Optionals,并遇到了一个奇怪的行为。 我想知道这是否真的是一个强烈的“function”或者什么……奇怪… 下面是给出的示例:我有一个带有Optional的方法,其中orElse我想评估另一个可选项。 如果其他Optional不存在,我将引发IllegalArgumentException: firstOptionalVar.orElse(secondOptionalVar.orElseThrow(IllegalArgumentException::new)); 现在,如果secondOptionalVar是一个空的Optional,它将引发IllegalArgumentException,即使firstOptionalVar存在也是如此。 这对我来说似乎不对。 如果firstOptionalVar不存在,我希望它只会引发IllegalArgumentException。 使用java7方法来解决这种行为并不是什么大问题: firstOptionalVar.isPresent() ? firstOptionalVar.get() : secondOptionalVar.orElseThrow(IllegalArgumentException::new); 有没有其他人以前经历过这种行为? 这真的是选项应该表现的方式吗?

我应该声明从方法签名中的方法抛出的所有exception还是仅仅exception的超类?

当我从方法中抛出已检查的exception时,我应该在方法签名中声明exception的超类还是所有不同的类型? 如果我有以下例外: private class SuperException extends Exception { } private class SubExceptionOne extends SuperException { } private class SubExceptionTwo extends SuperException { } 方法签名应该是: void confirmAccount() throws SubExceptionOne, SubExceptionTwo; 要么 void confirmAccount() throws SuperException; 在最后一个方法签名中,如何告诉其他开发人员可以从该方法抛出哪些exception? 如果不同的子类型需要不同的处理?

抛出exception后如何继续执行java程序?

我的示例代码如下: public class ExceptionsDemo { public static void main(String[] args) { try { int arr[]={1,2,3,4,5,6,7,8,9,10}; for(int i=arr.length;i<10;i++){ if(i%2==0){ System.out.println("i =" + i); throw new Exception(); } } } catch (Exception e) { System.err.println("An exception was thrown"); } } } 我的要求是,在捕获exception后,我想处理数组的其余元素。 我怎样才能做到这一点?