我是学生。 刚回来做作业,说我应该调用构造函数方法,而不是重用相同的代码。 我复制了代码,因为我无法在没有错误的情况下调用构造函数。 从单独的方法调用构造函数方法的正确语法是什么?
我确实做了搜索,但是找不到这个特定的问题(在班级内)。 我确实尝试过使用" this"以及创建类实例,但是我一直在出错。
import java.util.Random;
public class Coin {
// variable for a generic coin toss
private String sideUp;
// Constructor
// ******************** Instructor notes...
// This is the same code as your toss() method
// It is OK to call that method from your constructor.
// Don't copy/paste code or repeat yourself if not required.
public Coin() {
Random rand1 = new Random();
int x = rand1.nextInt(2);
if (x > 0){
sideUp ="Heads";
}else{
sideUp ="Tails";
}
}
//Void Method
public void toss() {
// how to call the Coin constructor above??????????????????????????
Coin();
}
}
呼叫new Coin();
硬币newCoin = new Coin();
反之亦然。 将代码移回toss方法,只需从构造函数内部调用toss()即可。
@MikeB不好的主意。 您不应该从构造函数中调用该方法。 看到我的答案为什么。
@RohitJain因此将方法定为最终方法。
谢谢,Arnaud,那行得通!
@ user3352523调用new Coin()起作用了吗? 你确定吗? 我确定它可以编译,但是确实可以完成工作吗? 这将创建一个新的Coin对象,并将设置该新对象的sideUp字段,但不会设置您想要的Coin的sideUp字段。
反之亦然。将代码移回toss方法,只需从构造函数内部调用toss()。
import java.util.Random;
public class Coin {
// variable for a generic coin toss
private String sideUp;
// Constructor
// ******************** Instructor notes...
// This is the same code as your toss() method
// It is OK to call that method from your constructor.
// Don't copy/paste code or repeat yourself if not required.
public Coin() {
toss();
}
//Void Method
public final void toss() {
Random rand1 = new Random();
int x = rand1.nextInt(2);
if (x > 0){
sideUp ="Heads";
}else{
sideUp ="Tails";
}
}
}
正如其他评论和答案所指出的那样,可能从构造函数中覆盖的调用方法是一个坏主意。这是为什么的一个很好的解释:为什么在构造函数中调用方法被认为是不好的做法?
您可以像在这里一样将方法设为final以避免出现问题。
感谢您提供所有信息!
// ******************** Instructor notes...
// This is the same code as your toss() method
// It is OK to call that method from your constructor.
恐怕第三句话不是真的。实际上,在构造函数中调用可重写方法是不可行的。在对象完全初始化之前,这将泄漏this引用。如果您覆盖子类中的方法,则可能会给您带来意想不到的结果。您应该与您的教练确认。
顺便说一句,讲师不是说要从方法中调用构造函数,而是相反。但是您不会做任何一个。如果该部分代码必须是toss()方法的一部分,则只需将代码从构造函数移动到toss()方法即可。
或者,如果您确实希望在构造函数和toss()方法中都执行这些代码,则在您的类中创建一个private方法,将这些代码移到那里,然后从两个地方调用它:
public class Coin {
// variable for a generic coin toss
private String sideUp;
public Coin() {
initSideUp();
}
//Void Method
public void toss() {
initSideUp();
}
private void initSideUp() {
Random rand1 = new Random();
int x = rand1.nextInt(2);
if (x > 0){
sideUp ="Heads";
}else{
sideUp ="Tails";
}
}
}
优点。 他应该声明一个private方法来执行此操作,然后让构造函数和公共toss都调用该方法。
@ajb确实如此。 将把这一点添加到答案中:)
要使用构造函数,您需要使用'new'关键字。例如
Coin myCoin = new Coin();
这不会解决他的问题。 他想重用代码,而不是创建新对象。
它确实回答了上述问题-"如何在另一个方法的类中调用构造函数"。
并不是的。 剩下的问题将询问"如何调用构造函数方法"-并且,由于实际上没有构造函数方法之类的东西,因此有必要更加认真地研究问题,以找出发问者的实际要求。 我们不能总是期望新学习者正确使用术语。