【问题标题】:java "redundant" wrapper class?java“冗余”包装类?
【发布时间】:2011-03-15 22:50:28
【问题描述】:

我可能有我的术语错误,但有人可以解释为什么我们需要在一个类中包装 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!");
    }

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

刚开始,所以对我来说有点陌生。

我的 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

谢谢

【问题讨论】:

    标签: java oop class


    【解决方案1】:

    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。我正在阅读 Oracle Java 教程,除非我弄错了,否则他们已经构建了一个示例 much like my code,因此假设这是一个约定。无论如何,你的回答很有道理!
    • @calum - 这是一个旨在说明不同事物的玩具示例;即如何创建和使用对象,而不是如何设计理想的主程序。选择随机教程代码并尝试将其用作良好实践的示例是一个坏主意。 (而且我绝不会指责这个特定的例子。远非如此。它更好地服务于它的真正目的。)
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 谢谢,如果有代表会+1!
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2022-01-01
      • 2016-03-02
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多