gpt4 book ai didi

java - 带参数的方法和不带参数的方法之间的区别?

转载 作者:行者123 更新时间:2023-11-29 03:01:31 26 4
gpt4 key购买 nike

好吧,这可能是个愚蠢的问题。然而,这真的让我很困惑;
像这样的方法有什么区别:

 toString()  

还有一个方法
toString(String s) ?

我知道最后一个不存在,但假设我做了一个这样的。
为什么我应该选择制作一个可以像这样调用的方法:object.method(); 而不是:method(object j ); 我希望我能解释一下自己.

最佳答案

这完全取决于您希望该方法做什么。

例如,.toString(),用于提供对象的字符串表示。在这种情况下,该方法按预期运行所需的所有数据都存储在对象本身中,因此不需要外部输入。

举一个不同的例子,printToStream(Stream stream)(其中 Stream 是所有流使用的一些接口(interface),无论是文件流、控制台流、网络流, ETC)。在这种情况下,方法需要知道它必须写入哪个流。

printToStream 方法所属的类可以有一个属性来指示它必须打印到哪个流,从而允许我们将 printToStream 的签名更改为 printToStream(),但这需要 2 行代码来设置,在这种情况下,这可能会带来问题,特别是如果您需要打印到不同的流并且在某些时候您忘记了设置属性。因此,在这种情况下,让方法接受额外的参数会导致代码更清晰,更不容易出错。

编辑:parseInt 方法是 Integer 类提供的静态方法,用于将项目从一种类型转换为整数。静态方法是需要自包含的方法,因此如果您想使用静态方法将一个对象从一种形式转换为另一种形式,将它作为参数传递是可行的方法。

您提出的建议看起来像这样:int a = "123".ToInteger();。我想那是做同样事情的一种方法,但最终 Java 规范并不是按照这种思路设计的。

编辑 2:我将尝试将我的答案扩展到 @ user3284549 提供的答案。请注意,我的回答绝不是最终的,应该由您可以在网上找到的其他 Material 进行补充。在 Java 中,方法是:

  • 静态。静态方法是没有状态(稍后会详细介绍)并且是自包含的方法。如前所述,Integer 类中的 .parseInt 方法就是此类方法的一个示例。 Math 类提供了另一个示例。

  • 非静态。非静态方法是在对象初始化(或实例化)后可用的方法。这些方法是作用于对象状态的方法,或者公开对象提供的某些功能,这些功能反过来可能会影响对象的行为方式。

再次以您的骰子为例,您可以通过两种方式实现这一点:

假设我们有一个名为 Dice 的类:

public class Dice {
private int value;

public int getValue() {
return this.value;
}

public void setValue(int value) {
this.value = value;
}
}

Static method

public static void roll(Dice d) {
//Rolling the dice entails a potential change in it's current value. Thus, you would need to access the dice itself and update the value.
Random r = ...
d.setValue(randomNumber);
}

Non Static Method

我们只是增强了 Dice 类,使其拥有一个模拟掷骰子的新方法,如下所示:

public void roll() {
Random r = ...;
this.value = randomNumber;
}

如果你注意到,即使在静态方法中,我们仍然使用了一个接受参数的方法。特定的 setXXX 方法(及其对应部分 getXXX 方法为我们提供了封装)。这是因为我们需要更改 Dice 对象的状态。

关于java - 带参数的方法和不带参数的方法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com