在Java类中创建新实例

时间:2019-03-02 06:34:08

标签: java

我是Java的新手,我看到了此示例代码。我不知道为什么在JavaApplication.java文件中我们需要通过new关键字创建一个新实例来设置山羊名,但是在Tiger.java中,不需要通过new关键字创建一个新实例来设置山羊名!有什么区别?

JavaApplication.java

public static void main(String[] args) {
    Tiger t = new Tiger();
    Goat g = new Goat();
    Goat g1 = new Goat();
    g.name = "goaty";
    g1.name = "goatia";
    t.name = "woofy";
    t.hunt(g);
    t.hunt(g1);
}

Tiger.java

public class Tiger {
    String name;
    void hunt(Goat food) {
        System.out.println(name + " ate " + food.name);
    }
}

Goat.java

public class Goat {
    String name;
}

4 个答案:

答案 0 :(得分:2)

在函数Tiger内的hunt类中,food是类型Goat的参数,并且该参数不需要由{{1}实例化}关键字。只需实例化该对象。

答案 1 :(得分:1)

我也是Java的新手,但是我在Java中了解到的是,您不能将非静态方法/变量链接到静态方法/变量,因此,您需要为其创建实例。 :)需要new关键字来创建它的实例。.

答案 2 :(得分:1)

据我所知,您已将山羊食物放置为参数,这意味着hunt方法将接受山羊类型的对象,基本上食物是山羊类型的引用变量,因此山羊可以做的任何事情也应适用于食物。在您的Goat类中,您只有一个名称字段。因此,每当创建一个对象时,您都可以为其命名。现在,您正在将Goat对象传递到您的方法中,以便打印出food.name您的山羊需要具有一个名字。

答案 3 :(得分:1)

只能使用'new'关键字来创建山羊。创建山羊后,您可以将这只山羊给老虎吃。 所以这只山羊

 void hunt(Goat food) {
    System.out.println(name + " ate " + food.name);
}

已经创建,因此您无需再次创建。当然,您可以再次初始化它,但这毫无意义,因为如果老虎可以自己创造山羊,那么就不必猎杀山羊。