参数化构造函数中的错误

时间:2014-06-26 13:02:53

标签: java

当我们使用参数化构造函数时它会给出错误,但是当我们使用默认构造函数时它没有给出任何错误,为什么?

import java.io.*;

public class PrimeGenerator
{
    final int a;
    PrimeGenerator(PrimeGenerator r)
    {
        r.a=10; 
    }

    public static void main(String rgs[])
    {
        PrimeGenerator ab= new PrimeGenerator(ab);
        System.out.println(ab.a);
    }
}

4 个答案:

答案 0 :(得分:3)

当您尝试将其传递给构造函数时,

ab未初始化。

PrimeGenerator ab = new PrimeGenerator(ab);

您需要先初始化PrimeGenerator然后再转到构造函数。


我不完全确定你的目标是什么,但正如Rudi所说,你需要在构造函数完成之前初始化最终变量。

以下是您要解决的问题的可能解决方案:在作为参数传递和最终初始化之前进行初始化。

public class PrimeGenerator{
    final int a;

    PrimeGenerator(){
        a = 10;
    }

    PrimeGenerator(PrimeGenerator r){
        a = r.a; 
    }

    public static void main(String args[]){
        PrimeGenerator ab = new PrimeGenerator();
        PrimeGenerator cd = new PrimeGenerator(ab);
        System.out.println(ab.a);
        System.out.println(cd.a);
    }
}

注意:接受的约定是在main args中命名String []。

答案 1 :(得分:2)

您的一个问题是因为您的类变量a被声明为final

必须在构造函数完成运行之前初始化final变量。您之所以没有这样做,是因为您正在尝试初始化解析为构造函数的a的{​​{1}}变量而不是PrimeGenerator中的a变量this

另外,正如Andrew_CS所指出的那样,您尚未在尝试将其解析为构造函数之前初始化PrimeGenerator变量

答案 2 :(得分:0)

您的变量a是最终的,这意味着您只能在创建时设置其值一次。因此,r.a=10;将失败,因为无法设置两次。

此外,由于尚未创建对象,因此无法将对象发送给自身。

答案 3 :(得分:0)

您将对象添加为您创建的参数。那是行不通的:

PrimeGenerator ab= new PrimeGenerator(ab);

使用默认构造函数。

PrimeGenerator()
{
a=10; 
}