误解如何使用构造函数(无参数)

时间:2016-03-26 17:49:46

标签: java syntax constructor compiler-errors

我的指示是使用默认值创建一个无参数的构造函数。

我在设置正确的构造函数以初始化类变量reim时遇到了困难。我试图创建一个默认构造函数并使用它,但我有一些错误表明我没有正确地执行它。任何帮助将不胜感激。

public class Complex {
    // Constants (final)
    protected double re;   // the real part
    protected double imag;   // the imaginaryinary part
    // Variables
    public double product;

   public Complex() {}  

    // create a new object with the given real and imaginaryinary parts
    Complex() {
        this.re = real;
        imag = imaginary;
    }
....... Code goes on

我认为我的大多数问题都与我的构造函数有关,缺少'this'

3 个答案:

答案 0 :(得分:3)

错误,因为您错过了 args 构造函数

// create a new object with the given real and imaginaryinary parts
Complex(double real, double imaginary) {
    this.re = real;
    imag = imaginary;
}

如果您需要正确初始化值,可以使用final修改器来使用args。请参阅建议Use final on constructor and setter parameters

Complex(final double real, final double imaginary) {
    this.re = real;
    imag = imaginary;
}

对象属性可以在构造函数的早期初始化,也可以在创建对象后最近初始化,需要使用mutators来修改对象的非final属性。

在早期对象和构造函数中,您可以初始化成员内联

在最后一种情况下,有很多其他方法可用于初始化对象,在大多数情况下,您应该在方法上使用public修饰符,通过修改其属性来改变对象的状态。

答案 1 :(得分:3)

你在Complex类中有一个构造函数,但它没有设置为接受参数,但你试图在构造函数中设置类变量,就像你一样。将构造函数更改为:

// create a new object with the given real and imaginary parts
Complex(double real, double imaginary) {
    this.re = real;
    imag = imaginary;
}

其次,在调用时会出现其他错误:

Comp.Complex();

这不是有效的行。您可以在Comp上调用其他方法(不应该大写,应该称为'comp',如:

comp.reciprocal()

您还可以使用默认的no-args默认构造函数,如下所示:

public Complex(){
}

您不需要初始化双精度和虚数,因为原始双精度自动初始化为0.0。

如果要将它们初始化为其他值,它将如下所示:

public Complex(){
    re = 100.00;  //or some other value
    imaginary = 200.00; //or some other value
}

最后,您可以拥有多个构造函数,只要每个构造函数具有不同数量的输入参数和/或不同类型即可。所以可以同时使用默认构造函数和接受2个双精度作为输入的构造函数。

你真的应该阅读Java构造函数。对于任何新的Java开发人员来说,这是一个非常基础和核心的主题,只需要花一点点力量来学习语言的结构,就可以轻松纠正这些问题。网上有很多示例和教程,这里只有其中一个:http://www.java-made-easy.com/java-constructor.html

答案 2 :(得分:0)

 // create a new object with the given real and imaginaryinary parts
Complex() {
    this.re = 1.0;
    this.imag = 2.0;
}