Java 如果布尔函数失败,将返回什么?

Java 如果布尔函数失败,将返回什么?,java,Java,假设一种方法: public boolean setAttribute(){ boolean returnval = false; object = this.getObject; //suppose this returns null for(Object obj : object.getObjectsForLoop()){ //<== this will fail doSomething(); returnv

假设一种方法:

public boolean setAttribute(){
  boolean returnval = false;
  object = this.getObject;                       //suppose this returns null
  for(Object obj : object.getObjectsForLoop()){  //<== this will fail
     doSomething();
     returnval = true;   
  }
  return returnval;
}
public boolean setAttribute(){
布尔返回值=false;
object=this.getObject;//假设返回null

对于(Object obj:Object.getObjectsForLoop()){/,如果此操作无法返回有效对象:

object = this.getObject;
这不会返回任何内容。它将抛出NullPointerException:

for(Object obj : object.getObjectsForLoop()){

如果此操作无法返回有效对象:

object = this.getObject;
这不会返回任何内容。它将抛出NullPointerException:

for(Object obj : object.getObjectsForLoop()){

它将抛出一个
NullPointerException
,而不是返回任何内容

有关更多信息,请阅读的线索。
这个页面对这个概念和过程有一个很好的解释:

它将抛出一个
NullPointerException
,而不是返回任何内容

有关更多信息,请阅读的线索。

这一页对概念和过程有很好的解释:

这将导致
NullPointerException
,因为
for
将尝试从
null
对象获取迭代器。

这将导致
NullPointerException
,因为
for
将尝试获取i来自
null
对象的畸胎体。

该方法将使用
NullPointerException
突然完成。换句话说,它不会返回任何内容。

该方法将使用
NullPointerException
突然完成。换句话说,它不会返回任何内容。

取决于您所说的失败。在您的情况下,它将看起来您的意思是
抛出NullPointerException
。在这种情况下,setAttribute的调用方也将获得NullPointerException。如果您在任何位置都不处理NullPointerException,这将返回堆栈中的main并终止程序。如果您处理NullPointerException,将调用catch块。

取决于失败的含义。在本例中,您的意思似乎是
抛出NullPointerException
。在这种情况下,setAttribute的调用方也将获得NullPointerException。如果您在任何位置都不处理NullPointerException,这将返回堆栈中的main并终止程序。如果您处理NullPointerExceptionterException,将调用catch块。

如果对象为null,则在迭代器中使用它将触发NullPointerException-这就是您将得到的。

如果对象为null,则在迭代器中使用它将触发NullPointerException-这就是您将得到的。

突然完成包括任何中断正常f的内容低。这包括抛出的异常、中断语句、继续语句,甚至返回语句。@Nathan:Interestng。我链接到的JLS部分说“突然完成总是有一个关联的原因,它总是一个带有给定值的
抛出
。”但说“[…]返回语句总是突然完成”.我编辑了我的答案以删除错误信息。@Nathan:我现在明白我被误导的地方了:(我以前引用过)只处理求值表达式(只能以
throw
突然结束,没有其他原因)。突然完成可能不仅仅是抛出异常这一事实有时在代码中也会引起混淆。例如:
For(;/*ever*/;)try{continue;}finally{break;}
将只执行一次循环,因为
finally
会拾取由
continue
语句引起的突然完成,而
finally
本身会导致循环突然完成。突然完成包括任何中断正常流的内容。这包括抛出的异常、中断语句、continue语句,甚至返回语句。@Nathan:Interestng。我链接到的JLS第1部分说“突然完成总是有一个相关的原因,总是一个带有给定值的
throw
。”但是说“[…]返回语句总是突然完成”.我编辑了我的答案以删除错误信息。@Nathan:我现在明白我被误导的地方了:(我以前引用过)只处理求值表达式(只能以
throw
突然结束,没有其他原因)。突然完成可能不仅仅是抛出异常这一事实有时在代码中也会引起混淆。例如:
For(;/*ever*/;)try{continue;}finally{break;}
将只执行一次循环,因为
finally
会拾取由
continue
语句导致的突然完成,而
finally
本身会导致循环突然完成。您尝试时发生了什么?当我尝试时,它会抛出一个空指针异常。我想知道是否有任何可能性它将继续。当您尝试它时发生了什么?当我尝试它时,它抛出了一个空指针异常。我想知道它是否有可能继续。对。考虑到Java没有指针,人们不会期望这样的命名:)对。考虑到Java没有指针:)