难以理解程序输出

时间:2011-12-22 07:19:35

标签: java oop object

这是一个程序

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 个答案:

答案 0 :(得分:5)

事件顺序:

// 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 :(得分:1)

这说明了原因:

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

答案 2 :(得分:0)

因为你在调用playIt()时设置标题为“我是电影的标题”; 尝试更改两行的顺序

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

答案 3 :(得分:0)

如果你追踪这些电话,它应该变得相当明显。

Movie one = new Movie();
此时

标题将为NULL(即,它没有赋值)

one.title = "I am title";

现在你的电影对象有一个标题"我是标题"

one.playIt();

在一个上调用playIt()方法,该方法设置&#34的标题;这个" (这是一个)和#34;我是电影的标题"

答案 4 :(得分:0)

您将"I am title"设置为title类型的对象one中的Movie变量。

当你在同一个对象中调用方法playIt()时,varible title会被另一个值"I am title of movie"作为对象。

如果你反转这样的行

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

输出将为"I am title",因为您在调用playIt()方法后设置了此值。