Смущен, чтобы понять вывод программы - PullRequest
0 голосов
/ 22 декабря 2011

Вот программа

public class MovieTitle {
    public static void main(String[] args) {
        Movie one = new Movie();
        one.title = "I am title";
        one.playIt();
        System.out.println(one.title);
    }
}

class Movie {
    String title;
    void playIt() {
        this.title = "I am title of movie";
    }
}

Вывод "Я - название фильма" Я пытаюсь понять это, но до сих пор не понимаю его правильно.Я хочу знать: Почему не печатается «Я - название»

Ответы [ 5 ]

5 голосов
/ 22 декабря 2011

Последовательность событий:

// create a new Movie called "one"
Movie one = new Movie();

// at this point, one.title is still null

// set the title to "I am title"
one.title = "I am title";

// call playIt, which in turn ...
one.playIt();
   // sets the title to something else again
   => this.title = "I am title of movie";

Если вы напечатали заголовок перед вызовом playIt, он все равно будет отображаться как «Я - заголовок».

1 голос
/ 22 декабря 2011

Показывает ли это, почему:

public class MovieTitle {
    public static void main(String[] args) {
        Movie one = new Movie();
        System.out.println(one.title);
        one.title = "I am title";
        System.out.println(one.title);
        one.playIt();
        System.out.println(one.title);
    }
}

class Movie {
    String title;
    void playIt() {
        this.title = "I am title of movie";
    }
}

Вот соответствующий вывод:

java MovieTitle
null
I am title
I am title of movie
0 голосов
/ 22 декабря 2011

Вы присваиваете "I am title" переменной title в объекте one типа Movie.

Когда вы вызываете метод playIt() в том же объекте, переменному заголовку присваивается другое значение "I am title of movie".

Если вы инвертируете строки, как это

one.playIt(); 
one.title = "I am title";

Выход будет "I am title", потому что вы устанавливаете это значение после вызова playIt() метода.

0 голосов
/ 22 декабря 2011

Если вы отслеживаете вызовы, это должно стать довольно очевидным.

Movie one = new Movie();

title будет NULL на этом этапе (т. Е. Ему не было назначено значение)

one.title = "I am title";

Теперь ваш объект Movie one имеет заголовок "I am title"

one.playIt();

Вызывает метод playIt () для одного, который устанавливает заголовок "this" (который равен единице) в "I am title"фильма "

0 голосов
/ 22 декабря 2011

Потому что вы устанавливаете при вызове playIt () заголовок «Я название фильма»; Попробуйте изменить порядок двух строк

one.title = "I am title";
one.playIt();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...