-1

我在网上找到了一个教程,但我真的不明白结果怎么可能是这样的:

Passed Name is :tommy

这是代码:

public class Puppy {

    public Puppy(String name) {
        // This constructor has one parameter, name.
        System.out.println("Passed Name is :" + name);
    }

    public static void main(String[] args) {
        // Following statement would create an object myPuppy
        Puppy myPuppy = new Puppy("tommy");
    }
}

它到底在哪里说name = tommy?我认为它至少可以使用类似 ("passed Name is :" + myPuppy).

谁能帮我理解这一点?

4

5 回答 5

7

作为构造函数参数传递的值

Puppy myPuppy = new Puppy( "tommy" ); // the String reference to "tommy"

绑定到构造函数参数name

public Puppy(String name){
于 2013-10-12T16:15:15.117 回答
1

它从来没有说name = tommy,你是对的。构造函数仅打印String name传递给它的参数(实际上并未为“Puppy”的类实例设置成员名称变量)。

于 2013-10-12T16:16:51.283 回答
1

当你运行程序时,你的 main 方法被执行。

所以你执行这一行

Puppy myPuppy = new Puppy( "tommy" );

这意味着“创建类型为 Puppy 的变量 myPuppy。然后使用构造函数创建新对象,该构造函数将一个字符串作为变量,并且该字符串的值是“tommy”。

这是一个构造函数,它与类同名并且没有 void/return 参数

public Puppy(String name)

所以它运行并在那里执行这一行

System.out.println("Passed Name is :" + name );

在变量名中是“tommy”。

于 2013-10-12T16:17:55.927 回答
1

在行中:

Puppy myPuppy = new Puppy( "tommy" ); // the String reference to "tommy"

请注意,“myPuppy”是您的 java 程序中的变量名,但“tommy”是您传递给 Puppy 类构造函数的字符串值。

因此,在这一行:

System.out.println("Passed Name is :" + name );

java变量“name”的值是“tommy”,这就是为什么最终结果是预期的:

“传递的名字是:tommy”

于 2013-10-12T16:20:18.847 回答
1

这是传递变量的一个坏例子。它是一个具有 main 和一个构造函数的类。什么是构造函数是正确的问题。在java中,您可以拥有类,如果该类中的方法与该类命名相同,则该类是构造函数。构造函数创建的对象很像您熟悉的原始对象,例如 int、boolean、float 等。最大的区别在于该对象具有附加到它的方法、其他原始对象、指针、其他对象。要将变量从一种方法传递到另一种方法,有两种方法。一个你传递一个指针,两个你传递一个值。

在此示例中,您没有传递变量,而是创建了一个值为“tommy”的对象,该对象的构造函数需要插入一个字符串。然后对象将声明打印到屏幕上,作为其构造的一部分。

于 2013-10-12T16:22:03.397 回答