2013-12-24 4 views
0
public class Bug1 { 
    private String s; 
    public void Bug1(){ 
    s = "hello"; 
    } 
    public String toString() { 
     return s; 
    } 
    public static void main(String[] args) { 
     Bug1 x = new Bug1(); 
     System.out.println(x); 
    } 
} 

Может кто-нибудь, пожалуйста, объясните мне этот код шаг за шагом, скажите мне, почему он возвращает «нуль» из out.print, а затем что нужно изменить, чтобы оно вернулось «привет» вместо этого?Чтение, понимание и исправление этого кода

+2

Шаг 1: Прочтите книгу. Шаг 2: сделайте домашнее задание Шаг 3: ... Шаг 4: Наслаждайтесь! – HamZa

+2

Вы должны оставить «void» перед 'Bug1()', чтобы он был конструктором. –

ответ

0

Добро пожаловать в прекрасный мир Java. Код в main выглядит следующим образом:

public static void main(String[] args) { 
Bug1 x = new Bug1(); 
System.out.println(x); 

}

Итак, вы создали объект под названием x типа Bug1. Я думаю, вы читали о конструкторах. Строка кода, определенная в классе:

public void Bug1(){ 
s = "hello"; 
} 

Вы ожидаете, что эта строка кода будет конструктором. Но, увы, вы сделали небольшую ошибку. В определении конструкторов указано, что конструкторы не имеют типа возврата. Хотя, они имеют то же имя, что и класс. Часть, где писать void Bug1(), вызывает ее функцию, а не конструктор.

Вы должны изменить строку кода

public Bug1() 
{ 
s="hello"; 
} 

Когда вы измените его на это, вы должны получить результат, который вы ищете. Попробуйте читать на Java Constructors.Вы, очевидно, поняли несколько концепций и оставили несколько.

При печати объекта всегда используйте метод toString. Это полезный метод, который позволит вам видеть объект в виде открытого текста.

Счастливое кодирование. :)

1

Поскольку public void Bug1() не является конструктором, он API, поэтому инициализация Bug вызовет конструктор по умолчанию. По умолчанию значение класса String равно null. Изменить public void Bug1() для public Bug1(), чтобы сделать его конструктору

0

Идеи здесь, вероятно, для Bug1 (метода), чтобы быть конструктором. Но для этого необходимо, чтобы подпись составляла public Bug1() (нет void). Как можно заметить, линия

Bug1 x = new Bug1(); // create instance 

Работает конструктор по умолчанию вместо этого, и s никогда не инициализируется.

0

, а затем что нужно изменить, чтобы вместо этого «привет»?

изменение

public void Bug1(){ 

к

public Bug1(){ 

, потому что он должен быть метод конструктора. Методы конструктора не могут указывать void.

и изменить

System.out.println(x); 

в

System.out.println(x.toString()); 

потому, что вам нужно вызвать метод toString() на экземпляре класса Bug1 получить обратный String.

Смежные вопросы