0

作为我的 AP 课程的一部分,我正在学习 java,并且在从事一个项目时,我想知道以下哪个是返回值的最佳方式?

   public double getQuarters(){
    return quarters;
}

或者

     public void getQuarters(){
    System.out.println(quarters);
}

***注意:我现在第二个选项不是“技术上”返回一个值,但它仍然显示我的值,所以为什么要打扰?

4

6 回答 6

2

你的答案是正确的。第二种方法根本不返回任何值,因此虽然您可能能够看到输出,但您的程序却不能。第二种方法对于测试甚至命令行应用程序仍然有用,但它应该被命名为类似 printQuarters 的名称。

于 2013-09-26T00:46:00.093 回答
1

你是在自问自答。对于“最佳”一词的大多数定义,您应该使用第一个选项。

但是,您的问题确实涉及访问器和修改器的面向对象编程主题。在您的示例中,“getQuarters”是一个访问器。通常最好使用访问器来检索您的值。这是坚持开放/封闭原则的一种方式。

此外,Java 社区对此有一个编码约定,许多工具和库都依赖于遵循这些约定的代码。

于 2013-09-26T01:20:21.113 回答
1
 public double getQuarters(){
    return quarters;
}

使用这个记录器来封装quarters和隐藏它以防止被其他程序访问。这意味着,您必须将其声明为private quarters. 让我们看看第二个选项:

 public void getQuarters(){
    System.out.println(quarters);
}

但是,这似乎是错误的,因为getQuarters没有返回任何东西。因此,将其重构为

     public void printQuarters(){
         System.out.println(quarters);
     }
于 2013-09-26T00:43:16.163 回答
0

选项1要优越得多。

  1. 它可以很容易地进行单元测试。
  2. 如果规范发生变化,有时您想打印结果,有时将其放入数据库怎么办?选项 1 将获取值的逻辑与如何处理它分开。现在,对于单一方法 getQuarters 没什么大不了的,但最终你可能有 getDimes、getEuros 等......
  3. 如果季度可能存在错误情况,例如值非法怎么办?在选项 1 中,您可以返回一个“特殊”值,例如 -1.0,或者抛出一个异常。然后客户决定做什么。
于 2013-09-26T01:24:48.317 回答
0

如果您需要做的就是在调用此方法时显示该值,并且您对控制台输出没问题,那么您的System.out.println方法将完成这项工作。但是,实际返回变量的函数在语义上更加正确和有用。

例如,虽然您可能只需要打印当前项目的变量,但如果您稍后回来并决定将变量输出到文件中怎么办?如果您getQuarters使用语句编写函数,println则需要重写整个内容。另一方面,如果您将函数编写为返回,则无需更改任何内容。您所要做的就是为文件输出添加新代码,并在需要的地方使用该函数。

因此,返回函数更加通用,尽管在较大的代码项目中更是如此。

于 2013-09-26T00:45:27.997 回答
0

值返回到程序中的特定点,以便程序可以使用它来运行。

您在程序中的特定点打印值,以便您作为最终用户可以看到您为某些功能返回的值。

根据功能(例如,您的功能),quarters程序中不再考虑的结果;它所做的只是将一个值打印到屏幕上,而应用程序没有 [clean|easy] 方法可以将其取回以使用它。

如果您的程序需要该值才能运行,那么它必须return. 如果你需要调试,那么你可以System.out.println()在需要的地方使用。

但是,您将多次使用该return语句。

于 2013-09-26T00:45:47.123 回答