2

基本上,我在一本书中做一个 Java 练习,这个源代码是它对练习的答案。但是,eclipse 说倒数第三行有一个错误,说“- 构造函数 PhoneNumber() 未定义”。但据我了解,该特定构造函数定义正确,那么问题是什么?

public class PhoneNumber {
    // Only the relevant source codes are posted here.
    // I removed other bits cause I'm sure they are not responsible for the
    // error

    private char[] country;
    private char[] area;
    private char[] subscriber;

    public PhoneNumber(final String country, final String area, final String subscriber) {
        this.country = new char[country.length()];
        country.getChars(0, country.length(), this.country, 0);
        this.area = new char[area.length()];
        area.getChars(0, area.length(), this.area, 0);
        this.subscriber = new char[subscriber.length()];
        subscriber.getChars(0, subscriber.length(), this.subscriber, 0);
        checkCorrectness();
    }

    private void runTest() {
        // method body
    }

    public static void main(final String[] args) {
        (new PhoneNumber()).runTest(); // error here saying :
                                        // "The constructor PhoneNumber() is undefined"
    }
}
4

3 回答 3

6

日食是正确的。您的代码没有定义没有参数的构造函数,这是您new PhoneNumber()在方法内部调用的main

您只有一个构造函数,即:

public PhoneNumber (final String country, final String area, final String subscriber)

如果您不指定任何其他构造函数,则会自动为您创建所谓的默认构造函数,即没有参数的构造函数。由于您使用 3 个参数指定一个,因此您没有默认构造函数。

有两种方法可以解决这个问题:

  1. 声明无参数构造函数;或者
  2. 使用您已有的构造函数。

要实现第一个选项,您可以执行以下操作:

class PhoneNumber {
  ...
  public PhoneNumber() {
    this("no country", "no area", "no subscriber");
  }
}

这将创建一个无参数构造函数,它只需使用一组默认参数调用您已有的构造函数。这可能是也可能不是您想要的

要实施第二个选项,请更改您的main方法。代替

(new PhoneNumber ()).runTest();

使用类似的东西:

(new PhoneNumber("the country", "the area", "the subscriber")).runTest();
于 2013-04-17T22:14:13.070 回答
1

只有在您未定义任何其他构造函数时,才会为您自动定义默认(无参数)构造函数。

于 2013-04-17T22:15:16.700 回答
0

你的错误说的是没有

PhoneNumber()

定义了构造函数(没有参数)。默认情况下,如果您不声明任何其他构造函数,这是您在 Java 中可用的构造函数。但是您通过实施来覆盖它

PhoneNumber (final String country, final String area, final String subscriber)
于 2013-04-17T22:14:02.617 回答