gpt4 book ai didi

java - 我试图了解 "calling an object' s 方法在 Java 中如何工作,但这让我感到困惑

转载 作者:行者123 更新时间:2023-12-02 10:29:12 25 4
gpt4 key购买 nike

我目前正在阅读 the documentation现在已经 3 次了,我很难将编写的内容应用到我自己的简单程序中。我试图从根本上理解为什么我在下面的代码中编写 p.add(v);

我声明了一个对象p和一个对象v,其值分别为5和17。然后,我的方法 add 将这两个值相加。我接受了参数 v,所以我知道当我引用对象 v 时,它必须位于 add(v) 的括号中在我的主要方法中。然而,我很难用语言解释为什么我需要在这里调用关于 p 的方法 addp 不也是像 v 这样的参数吗?为什么我不能将我的方法更改为:

public void add(Positive v, Positive p)

然后通过说add(v,p);来调用它?

根据java文档,当对象在我的类之外时,我需要调用方法吗?但这里的一切都在我的类(class)里?所以我不确定他们在文档中到底想说什么。

public class Positive {
public static void main(String[] args) {
Positive p = new Positive(5);
Positive v = new Positive(17);
p.add(v);
System.out.println(p.get());
}
private int n;

public Positive(int n) {
this.n = n;
}

public void add(Positive v)
{
this.n += v.get();
}

public int get() {
return n;
}
}

最佳答案

所以,你有一个名为 Positive 的类,你得到了 public static void main功能。正如您所记得的,Java 程序从 main 方法开始执行(阅读一下此 wiki: https://en.wikipedia.org/wiki/Entry_point#Java )。

因此,当您运行此方法时,您将执行以下操作:

Positive p = new Positive(5);
Positive v = new Positive(17);

在这里您启动了 2 个类实例,pv通过使用new运算符(调用构造函数方法)。

pvPositive 的两个不同实例.

每个pv具有此类中列出的方法(此处为 addget ),每个方法对于每个实例都是唯一的。

然后你会得到字段 n来自v使用get方法v并将其添加到 n p的成员(在此处阅读有关实例方法与静态方法的更多信息:在此处阅读有关以下内容的更多信息: https://www.geeksforgeeks.org/static-methods-vs-instance-methods-java/ )另请阅读有关成员的 Java 访问级别 ( https://www.programcreek.com/2011/11/java-access-level-public-protected-private/ )

现在你想执行add方法p通过执行 [首先,您将执行 get方法v ]:

p.add(v.get()) ;

因为它们都是非静态方法,它们属于一个实例,因此需要这种语法。

;;;

关于add(p,v) ;如果add被声明为 static参数是 Positive p, Positive v那么你可以按照你的建议做一些事情:

public class Positive {
public static void main(String[] args) {
Positive p = new Positive(5);
Positive v = new Positive(17);
int result = add(p,v);
System.out.println(result);
}
private int n;

public Positive(int n) {
this.n = n;
}

public static int add(Positive p, Positive v)
{
return p.get() + v.get();
}

public int get() {
return n;
}
}

了解有关静态/实例方法的更多信息。

关于java - 我试图了解 "calling an object' s 方法在 Java 中如何工作,但这让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706137/

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