如何在不重置参数值的情况下引用构造函数

时间:2017-12-28 23:30:31

标签: java object methods constructor call

仅供参考,我就像Java上的一个高中班一样,所以这个问题应该非常容易回应。我很难找到一种方法来调用类方法(构造函数)作为新对象,而不需要为参数添加新值。构造函数如下所示:

public Skills(int courage, int intelligence, int stamina, int crafting, 
int blacksmithery, int herbalism, int slingSkill, 
int bowSkill, int swordSkill, int armor, int stealth, int 
lifeForceSkill){
    this.courage = courage;
    this.intelligence = intelligence;
    this.stamina = stamina;
    this.crafting = crafting;
    this.blacksmithery = blacksmithery;
    this.herbalism = herbalism;
    this.slingSkill = slingSkill;
    this.bowSkill = bowSkill;
    this.swordSkill = swordSkill;
    this.armor = armor;
    this.stealth = stealth;
    this.lifeForceSkill = lifeForceSkill;

} 当我建立它时,我的主要方法就是这样做:

Skills skills = new Skills(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);

要将所有级别设置为1,然后我将具有稍后使用的对象技能。 (我是否将构造函数和对象的术语混淆了?如果它错了,只需将它们全部转移到我的脑海中,我认为我至少与它保持一致)。

问题是我在Skills类中有一个toString()方法,我想在主类的一个单独方法中调用它。

else if (optionChoice.equalsIgnoreCase("View Skills")){
    Skills skills = new Skills();
    System.out.println(skills.toString());
    break;
}

当然我在这里创建的对象会抛出一个错误,因为我不能只写Skills();没有为参数添加所有十二个值。那么当我无法为它创建对象时,如何从Skills类中调用该方法?价值不变的功能势在必行,而且由于它们是可变的并且随着程序的变化而变化,我无法为它们赋予任何价值。

我知道这可能是一个超级基本的问题,但这就是我所处的水平,所以任何超级基本的答案都会有所帮助。不应该花太多时间。提前谢谢!

4 个答案:

答案 0 :(得分:3)

在您的主要方法中,您的技能"如果要保留其值,则应传递对象。你每次正在做的是每次调用一个函数时创建一个新对象(构造一个)。

您想要的流程如下。

Skills skills = new Skills(...);
.... 
skills.toString();

就像你说的,如果你想在你的主类中的另一个方法中使用技能对象,只需将技能对象传递给该方法。像这样:

public static void main (String args[]) {
    Skills skills = new Skills(....);
    fooMethod(skills);
}

fooMethod(Skills skills) {
    // Here you can :
    skills.toString();
}

答案 1 :(得分:2)

skills声明为成员变量,通常称为字段(在main之外),然后像现在一样初始化它。然后,您可以使用skills. toString()从班级中的任何方法访问它。

答案 2 :(得分:2)

Overload具有默认功能的构造函数。

public Skills() {
     this (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
}

但是,如果Object本身不代表任何内容,并且仅为了访问toString方法而实例化,则应创建Static方法。可以通过调用类本身而不是对象来访问静态方法。虽然这很大程度上取决于您的预期目的。

public static toStaticString() {
    return "Static String";
}

如果您想要始终保留Skills对象,则需要传递该对象并在其上调用方法。请记住,实例化技能会创建一个新的“实例”,它将记住属于它的每个技能的各种值。关于这一点。

  

注意:短语“实例化一个类”与“创建一个对象”意思相同。创建对象时,您正在创建类的“实例”,因此“实例化”一个类。 - Java Docs

答案 3 :(得分:0)

这是另一个答案,因为我没有看到有人发帖。

通常,为了解决许多不同的问题,已经创建了许多编程语言模式。 其中一个是Builder模式,当有许多参数传递给构造函数时,它用作修复。现在,我不希望你感到困惑或者你指定的任何东西,你到目前为止只参加过1个Java课程,但是如果你想了解更多,你可以只使用谷歌“java builder模式”或者在你得到一段时间之后更熟悉Java,你可以通过 Joshua Bloch 阅读一本名为 Effective Java 2nd Edition 的好书,其中有一章Builder模式和许多其他有用的东西你如果你选择编程生涯,最终会需要。