Java 为什么要将main()放在专用类中?

Java 为什么要将main()放在专用类中?,java,oop,Java,Oop,我没有任何Java经验,有C语言背景 我想创建一个新的数据类型,比如抽象数据类型。在C语言中,这可以通过为新的数据类型创建一个结构来实现;我知道在Java中,您为该新数据类型创建一个类,然后开始为该类创建对象 我用两种不同的方法写了这篇文章,而且两种方法似乎都有效。但我不理解第二种方法的缺点 在这里,我为数据类型创建一个类,创建它的一个实例,然后执行操作。我发现这是互联网教程中使用的设计 public class DesignOne { public static void main(S

我没有任何Java经验,有C语言背景

我想创建一个新的数据类型,比如抽象数据类型。在C语言中,这可以通过为新的数据类型创建一个结构来实现;我知道在Java中,您为该新数据类型创建一个类,然后开始为该类创建对象

我用两种不同的方法写了这篇文章,而且两种方法似乎都有效。但我不理解第二种方法的缺点

  • 在这里,我为数据类型创建一个类,创建它的一个实例,然后执行操作。我发现这是互联网教程中使用的设计

    public class DesignOne {
        public static void main(String[] args) {
            MyDataType obj = new MyDataType(3,4);
            System.out.println(obj.sum());
        }
    }
    
    class MyDataType {
        int i;
        int j;
    
        MyDataType(int i, int j) {
            this.i = i;
            this.j = j;
        }
    
        int sum() {
            return this.i + this.j;
        }
    }
    
  • 在这里,我在具有驱动程序函数的同一个类中创建该类的实例。像
    sum
    这样的操作也被定义为类的成员。基本上,只有一门课

    public class DesignTwo {
        int i;
        int j;
    
        DesignTwo(int i, int j) {
            this.i = i;
            this.j = j;
        }
    
        int sum() {
            return this.i + this.j;
        }
    
        public static void main(String[] args) {
            DesignTwo obj = new DesignTwo(3,4);
            System.out.println("sum == "+obj.sum());
        }
    }
    

  • DesignTwo的缺点是什么?为什么首选DesignOne?

    两者之间没有本质区别(尽管通常不鼓励使用非最终公共字段)。唯一的区别是将main方法放在何处,它在概念上不属于任何特定类。在大型程序中,它通常存在于一个单独的启动程序类中,只是因为将它绑定到某个任意类是没有意义的,但这与数据建模基本无关

    基本上可以归结为。你应该试着给每个班级一个角色。在这里,您需要担任两个角色:

  • 加载一个对象并显示它
  • 表示对象

  • 因此,您应该使用两个类。一旦您开始希望在程序中使用和显示多种类型的内容,优势就变得更加明显。

    实际上,这些都相当于一种方法,我更倾向于第一种方法,在这种方法中,您有一个额外的类只用于主方法,因为您不会用不属于主方法的不必要的主方法来混乱您的类。相反,您可以使用一个定义良好的main方法作为程序的入口点。此外,如果您希望长期保存数据,将MyDataType保留为仅数据对象在将来具有优势。(另见)