2012-02-14 3 views
0

Я новичок в Java и написал этот код. Он имеет простой класс Box и два атрибута ширину и длину и некоторые функции.Ошибка конструктора в Java

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(); 
+0

Я хотел бы знать причину ошибки .. Так что кто-то пожалуйста, объясните .. –

+1

добавил объяснение. –

+1

Если вы специально не намерены публиковать конструкторы, сделайте их «публичными». Даже если вы этого не сделаете, ИМО, лучше указать их сферу действия, чтобы люди знали, что это не случайность. –

ответ

1

Необходимо определить конструктор по умолчанию.

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

Так получилось, что в Java, если вы не создали никакого конструктора, тогда компилятор создаст сам конструктор по умолчанию. Но если вы создали параметризованный конструктор и пытаетесь использовать конструктор по умолчанию без его определения, тогда компилятор произведет полученную вами ошибку.

+0

Установка 'length' и' width' в 0 в конструкторе немного избыточна, так как в любом случае они будут инициализированы этими значениями. –

+1

Это правильно. Но я подумал, что лучше написать его, поскольку он новичок в Java. –

1

Единственный конструктор, определяемый для Box, - Box(int w, int l).

Изменить main() на:

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

Или изменить Box иметь конструктор, который не принимает никаких аргументов и инициализирует width и length.

0

Или вы просто использовать определенный конструктор и передать длину и ширину к нему ...

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

и ваш определенный конструктор затем вызывает методу SetLength() и setWidth() с переданными значениями Int. (в этом случае со значениями 4 и 3)

0

Когда вы определяете настраиваемый конструктор, конструктор по умолчанию больше не будет доступен: Если вы хотите его использовать, вы должны определить его явно.

Вы можете определить два конструктора для следующих работать

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

Box() 
{ 
    //this is the default 
} 

Теперь вы можете использовать как:

new Box() 
new Box(w,l) 
Смежные вопросы