Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从函数返回值?_Java_Function - Fatal编程技术网

Java 如何从函数返回值?

Java 如何从函数返回值?,java,function,Java,Function,我在这里看到三个方面: 1) 使函数显式返回该值 2) 将附加参数添加到函数的参数列表中,并将字符串持有者作为该参数传递。函数完成执行后,该字符串持有者将包含函数的结果 3) 从将包含结果的函数中引发异常 我个人认为第一选择更可取,因为它简单、直观、直接 另一方面,当函数以错误的方式执行时,可能会有其他选择,如抛出异常或在发生错误时使用通过参数传递的变量来保存错误 直觉上,我看到理想的选择是有显式的返回值并抛出声明。所以返回值用于正常执行,捕获的异常将发出异常情况的信号。但我自己不太喜欢异常,只

我在这里看到三个方面:

1) 使函数显式返回该值

2) 将附加参数添加到函数的参数列表中,并将字符串持有者作为该参数传递。函数完成执行后,该字符串持有者将包含函数的结果

3) 从将包含结果的函数中引发异常

我个人认为第一选择更可取,因为它简单、直观、直接

另一方面,当函数以错误的方式执行时,可能会有其他选择,如抛出异常或在发生错误时使用通过参数传递的变量来保存错误

直觉上,我看到理想的选择是有显式的返回值并抛出声明。所以返回值用于正常执行,捕获的异常将发出异常情况的信号。但我自己不太喜欢异常,只要它不是完全不可预测的错误,所以我会使用显式返回值和附加参数来保存一些额外的情况日志或错误


请提供有关该主题的书籍或文章(不必谈论Java,任何其他具有类似机制的语言也适用)。

您绝对需要选项1。例外情况并非不可预测;如果你正确地使用它们,它们实际上是完全可预测的。您可以根据错误引发不同的异常类型(FileNotFoundException、IllegalArgumentException、SomeConditionSpecificToMyAppException等),这些异常可以包含您需要传递的任何错误或诊断信息


Java SE教程中有一个关于异常的好章节:

我几乎每次都会使用choice 1。没有任何东西可以阻止您根据需要抛出异常。

Java方法具有返回值的原因是:返回其结果。在绝大多数情况下,1应该是你唯一的选择。即使你想返回一个包装器对象,例如,因为你需要返回多个值,你可能只需要
return
thing

异常只是:它们是在异常(即异常)情况下抛出的。由于传统上引发异常也会影响性能,因此在正常操作期间不应引发异常

你为什么要把自己搞糊涂

编辑:

另一方面,例外情况非常适合于罕见/异常情况:

  • 它们具有生成调试信息的内置支持。在处理大多数bug时,获得堆栈跟踪是成功的一半

  • 所有优秀的调试器都允许将抛出的异常用作断点,这是非常宝贵的

  • 异常允许相对透明地向方法调用链传递错误条件,允许以所需的粒度放置错误处理代码

  • 异常是Java中处理错误条件的标准方法。这对大多数程序员来说应该足够了。请尊重那些必须使用您的代码的人,不要通过重新发明轮子来打破这些基本惯例


请阅读史蒂夫·麦康奈尔的完整代码。都在那里。

您是说返回一个“值”对象吗?顺便说一句,当我谈论附加参数时,“its”在“@Bohemian”中没有撇号,是的。诸如此类。我说的是第三方库中可能出现的异常,例如,标记为运行时异常的异常,因此除非它们出现,否则您无法预测它们。是的,但您无法更改第三方库可能返回或抛出的内容。但是,您可以从第三方库中捕获这些不可预测的异常,将它们包装到您自己的异常中,并相应地抛出/处理这些异常。但根本不使用“异常处理”机制不是更自然吗?我认为抛出异常通常是一件坏事,它会导致性能损失,可能还会导致其他问题。我的意思是,如果我可以包装异常并通过附加的“ValidationFault”StringBuilder参数返回该消息,我真的希望这样做。@gasan:不,这一点也不自然。Java有异常,每个人都用它们来表示异常情况。否则只会让API的用户感到困惑,会让它看起来很业余,而且不太实用。异常不仅仅是StringBuilder中的消息。它有一个类型、一条消息、任意数量的其他类型字段。它也不会在每次调用时强制创建空的StringBuilder,也不需要调用方在每次调用后检查StringBuilder。它还使程序更加健壮,因为它强制调用方处理它们。你应该做
抛出新的MySpecificException(“这个特定的东西出错了”)。当然,您可能会像在C中一样使用Java编程,但是为什么要首先使用Java呢?没有一个javaapi能满足您的建议。如果你愿意,可以这样做,但你已经被警告:这是一个糟糕的设计,你会激怒你API的所有用户。我不太喜欢异常的整个概念,因为它们变成了非异常,所以如果它们不是异常,为什么我要让我的程序以异常的方式运行,这可能会导致性能损失和其他丑陋的事情,而不是保存该异常文本并通过附加的“validationFault”StringBuilder参数返回它。@gasan:1。异常允许生成正确的调试信息(例如堆栈跟踪)。2.在调试器中可以轻松捕获异常。3.异常允许错误以标准方式在调用链上向上传播,但异常会导致额外的资源消耗,因此如果可能的话,最好以标准方式而不是通过异常进行程序控制