【问题标题】:Void and return in Java - when to useJava 中的 void 和 return - 何时使用
【发布时间】:2013-07-05 20:08:58
【问题描述】:

我对 void 和 return 有一些“困惑”。一般来说,我理解 void 用在方法中而不返回任何东西,而当我想向调用代码返回一些东西时,return 用在方法中。

但是在下面的代码中,我可以同时使用两者,我的问题是,使用哪一个?以及如何确定?是关于性能吗?

通常情况下,我在这两种情况下都会得到相同的结果。

public class Calc {
    private double number;

    Calc (double n)
    {
        number = n;
    }

    public void add(double n)
    {
        number += n;
    }   

    public double add1(double n)
    {
        return number = number +  n;
    }
}

谢谢!

【问题讨论】:

    标签: java return void


    【解决方案1】:

    你有这样的函数定义: -公共(或私人等)-lvl 访问。 -static(或空白)访问该方法而不创建该对象的实例。 -and void:您已经注意到任何返回某物的函数都包含在定义中的“某物”数据类型(例如:返回 int 值或字符串)。现在,当您的函数没有返回时,将 VOID 视为数据类型(int、string 等)的占位符

    【讨论】:

      【解决方案2】:

      return 不应与 void 类类型一起使用,因为默认情况下会返回程序输出,并且可以通过 java 类的适当方法显示,例如当您要显示程序的输出时:

      System.out.println("number = " + number);

      【讨论】:

        【解决方案3】:

        我个人更喜欢返回一个值。它允许您以很少甚至没有成本向调用代码提供信息(两种方式的性能通常大致相同)。它可以是计算的结果,也可以是 Mark 提到的允许您将语句链接在一起的对象。哪一个可能取决于您的特定应用程序。

        【讨论】:

          【解决方案4】:

          在void方法中:

          public void add(double n)
          {
              number += n;
          } 
          

          您不能跨方法使用n 变量。这意味着您将无法将它用于Calc 方法。

          但是,当使用实际返回某些内容的方法时,例如:

          public double add1(double n)
          {
              return number = number +  n;
          }
          

          您可以将该变量用作一个对象,从而允许您在 Calc 方法和其他方法中使用它任意多次,每次都可能是同一个对象(如果使用不同的值进行计算,则不建议使用) 或每次都创建一个新对象。

          据我所知,没有明显的性能问题。

          【讨论】:

          • 您是说变量 n 在 int 方法 (add1) 之外可见?
          • 你能提供一些关于它的更多信息或我可以阅读它的链接吗?
          • 当然。这是关于objectsreturning a value from methods的java教程
          • 我红了三遍returning a value from methods 却没找到你在说什么......我知道我的英语不好,但是就这么多...... ;)
          • 当然,但是returning a value from methodsobjects 齐头并进,当返回一个值时,要使用该值,您需要创建一个对象。另外,我忘了提到对象可以将返回值传递给变量:(Classname) (name for object) = new (Classname)(); 创建对象,(variable type) (variable name) = (name of object you created).(method)(); 将值放入变量中。
          【解决方案5】:

          你想写这个吗?

          Calc c = new Calc();
          double a = c.add(3);
          

          如果是,请保留您的 add1 方法。在您的对象类型中利用返回值的一种可能更好的方法如下:

          public class Calc {
            ....
            public Calc add(double d) { number += d; return this; } 
          }
          

          现在你可以写了

          Calc c = new Calc().add(1).add(2);
          

          很多时候非常方便,阅读效果好,节省竖屏空间。

          这个成语称为fluent API

          【讨论】:

            【解决方案6】:

            这样想: 如果您从代码中删除以下内容,您认为您的课程是否有用:

            public double add1(double n)
                {
                    return number = number +  n;
                }
            

            当你在做计算时,API的调用者永远不知道计算的结果:public void add(double n)

            【讨论】:

              【解决方案7】:

              这个方法:

              public void add(double n)
              {
                 number += n;
              } 
              

              您更改了number 的内部状态,但此方法的调用者不知道number 的最终值。

              在下面的方法中,您将number 的最终值告知调用者。

              public double add1(double n)
              {
                 return number = number +  n;
              }
              

              我建议保留一个单独的getNumber() getter 方法。

              【讨论】:

              • 谢谢。但我知道 void 和 return 关键字的定义。那不是问题。我的问题是“但是在下面的代码中,我可以同时使用两者,我的问题是,使用哪一个?以及如何确定?是关于性能吗?” .....
              猜你喜欢
              • 2017-11-15
              • 1970-01-01
              • 2015-06-02
              • 2010-10-19
              • 2018-11-11
              • 1970-01-01
              • 2015-09-21
              • 2019-01-01
              • 1970-01-01
              相关资源
              最近更新 更多