Java中的构造函数相关错误

时间:2012-02-14 10:42:22

标签: java constructor default-constructor

我是Java的新手并编写了这段代码。它有一个简单的类Box和两个属性宽度和长度以及一些函数。

class Box 
{
    private int width;
    private int length;
    Box(int w, int l)
    {
        setWidth(w);
        setLength(l);    
    }
    public void setWidth(int width)
    {
        this.width = width;
    }
    public int getWidth() 
    {
        return width;
    }
    public void setLength(int length)
    {
        this.length = length;
    }
    public int getLength() 
    {
        return length;
    }
    void showBox()
    {
        System.out.print("Box has width:"+width +" length:"+length);
    }
}

class Main {
    public static void main(String[] args) 
    {
        Box mybox = new Box();
        mybox.setLength(5);
        mybox.setWidth(5);
        mybox.showBox();
    }
}

我收到此错误。我该如何解决?有人可以解释一下。

Box.java:30: cannot find symbol
symbol  : constructor Box()
location: class Box
                Box mybox=new Box();

4 个答案:

答案 0 :(得分:1)

您需要定义默认构造函数。

Box()
{
    length=0;
    width=0;
}

在Java中也是如此,如果你还没有创建任何构造函数,那么编译器将自己创建默认构造函数。但是如果你已经创建了参数化构造函数并且尝试使用默认构造函数而没有定义它,那么编译器将产生你得到的错误。

答案 1 :(得分:1)

Box定义的唯一构造函数是Box(int w, int l)

main()更改为:

Box mybox = new Box(5, 5);
mybox.showBox();

或者更改Box以使构造函数不带参数并初始化widthlength

答案 2 :(得分:0)

或者你只是使用你定义的构造函数并将长度和宽度传递给它......

Box myBox = new Box(4,3);
myBox.showBox();

然后您定义的构造函数使用传递的int值调用方法setLength()和setWidth()。 (在这种情况下,值为4和3)

答案 3 :(得分:0)

定义自定义构造函数时,默认构造函数将不再可用: 如果要使用它,则应明确定义它。

您可以为以下内容定义两个构造函数

Box(int w, int l)
{
    setLength(l);
    setWidth(w);
}

Box()
{
   //this is the default
}

您现在可以使用两者:

new Box()
new Box(w,l)