有没有办法自动捕获异常?

Ngu*_*inh 1 java exception-handling

假设我有10行代码.任何行都可能抛出NullPointerException.我不想关心这些例外.如果一行抛出异常,我希望执行者跳转到下一行并继续前进.我可以在Java上这样做吗?如果是的话,请给我一些示例代码.

更新:(添加样本来源以获得更清晰的问题)

first.setText(prize.first);
second.setText(prize.second);
third.setText(prize.third);
fourth.setText(prize.fourth);
fifth.setText(prize.fifth);
sixth.setText(prize.sixth);
seventh.setText(prize.seventh);
eighth.setText(prize.eighth);
Run Code Online (Sandbox Code Playgroud)

假设我上面有8行代码.我想要的是:如果第4行(或5,6,...)抛出异常,所有其他代码行都能正常工作.当然我可以使用try ... catch来逐行捕获异常.但这种方式使我的来源非常复杂.

Nat*_*tix 7

这是不可能的.如果你想一段时间,你会发现这也是一个废话.以此代码为例:

String s = getSomeString(); // assigns null
int length = s.length; // throws NPE

if (length > 10) { // what would you do here?? length is un-initialized
    domeSomething();
}
Run Code Online (Sandbox Code Playgroud)

编辑

现在您已经使用代码片段更新了问题,有两种处理s的常规方法null:

1.禁止他们不应该去的地方

在您的代码段中,您提供了一个EditTexts 列表,其中任何一个都可能为null.好吧,在我看来,如果你有一个Activity应该有一些视图的Android,那么如果它们中的任何一个是出于任何原因则是编程错误null.没有一些视图的活动无法正常工作,因此抛出NPE并退出应用程序是一件非常明智的事情.

NPE告诉你" 嘿,你犯了一个错误,你必须解决它 ".在此之前,处于不可预测状态的应用程序继续执行是不安全的,因为没有人知道会发生什么,哪些数据可能会被破坏.

2.在有意义的地方允许它们,并提供空值检查

在某些地方,您可以拥有值为空的变量.如何表达空值有几种方法,null是最明显的方法.

在这种情况下,您不能忽略NPE的可能性,您必须进行一些空检查.但同样,NPE不是你的敌人.它会告诉你,你忘了考虑你应该拥有的所有可能情况.

当然,重复的空检查会使代码变得混乱和嘈杂,因此您可以创建一些方法来为您推广空检查.我无法想出一个明智的例子,所以请将此方法仅用于说明:

public void clearEditTexts(EditText... editTexts) {
    for (EditText e : editTexts) {
        if (e != null) {
            e.setText("");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此方法清除所有传递的EditTexts的内容.它们中的任何一个都可以为null,但是此方法在内部执行这些空值检查,因此您不必为每个方法手动执行此操作.


这个问题也是关于处理空值的非常好的解读: 避免使用!= null语句


Boa*_*ann 6

这是不可能的.如果您的变量可以为null,则只需要检查它,或者阻止它们为null.很少有人能够创建一个虚拟对象实现,其被覆盖的方法什么都不做,所以它可以用来代替有效对象而不是null.