java“冗余”包装类?

时间:2011-03-15 22:50:29

标签: java oop class

我的术语可能有问题,但是有人可以解释为什么我们需要在课程中包装 main method吗?这对我来说似乎相当多余。您是否可以再次扩展此课程,完成main

package bears;

import bears.Bear; 

// what's the point of this Class here?
public class MakeBear {     

    public static void main(String[] args)
    {
        int age;
        String name;
        Bear MyBear = new Bear("Jim", "brown", 12, 50); // constructor

        age = MyBear.getAge();
        name = MyBear.getName();

        System.out.println("The bear is called" + name +
                              " and is " + age + " years old!");
    }

此外,以上是构造程序的可接受方式 - 即在Bear方法中调用main类的构造函数,以及重新声明这样的变量吗?

刚开始这样对我来说有点陌生。

我的Bear课程的一部分,如果它是相关的:

public class Bear {
    private String name;
    private String colour;
    private int age;
    private int weight;

    public Bear(String bearName, String bearColour, int bearAge, int bearWeight)
    {
        name = bearName;
        colour = bearColour;
        age = bearAge;
        weight = bearWeight;    
    }
      // get/set methods

感谢

3 个答案:

答案 0 :(得分:4)

main必须在一个类中,因为Java中的所有东西都是一个类。

在您的简单示例中,主要功能通常在Bear类中。 MakeBear类是不必要的。

它会像这样重写。

public class Bear {
    private String name;
    private String colour;
    private int age;
    private int weight;

    public Bear(String bearName, String bearColour, int bearAge, int bearWeight)
    {
        name = bearName;
        colour = bearColour;
        age = bearAge;
        weight = bearWeight;    
    }

    public static void main(String[] args)
    {
        Bear myBear = new Bear("Jim", "brown", 12, 50); // constructor
        System.out.println("The bear is called" + myBear.getName() +
                              " and is " + myBear.getAge() + " years old!");
    }
}

答案 1 :(得分:1)

首先,您编写的所有内容都是Java中的一个类。它不是计算机的普遍规律,甚至不是OO,它只是语言的设计方式。

其次,main()不是特殊方法,它只是从命令行执行Java程序时调用的第一个方法。

对于包含少量类而不处理命令行参数的简单程序,您可以将main()方法放在几乎任何有意义的类中。 (在您的示例中,Bear类也同样出色。)

但对于较大的程序,最好有一个专用的主类,除了处理命令行参数,显示使用信息和CLA错误,并创建另一个类的一个实例(应用程序的真正入口点)之外什么也不做。开始吧。

因此,尽管在您的示例中MakeBear确实毫无意义,您可以将main()方法移动到Bear,但在更大的应用程序中它不会。

答案 2 :(得分:0)

这就是面向对象概念的用武之地 - 一切都是一个对象,它是一个类的实例。 Java程序中的所有内容都必须在一个类中。 JVM使用静态main方法启动应用程序的主线程。 这取决于你想对这些变量做什么。在您的代码中,您可以直接打印变量,而无需将它们分配给变量,如

System.out.println("The bear is called" + myBear.getName() +
                          " and is " + myBear.getAge() + " years old!");

理想情况下,您应该将您的Bear和MakeBear类组合为MakeBear,因为您的示例没有做任何事情。