“main()class”文件的最佳编码(布局)实践?

时间:2013-11-30 16:58:03

标签: java main methodology

目前,我的“main()类”文件看起来有点像下面的代码。我没有将这个示例代码与//评论混为一谈,而是简单地用数字(1到4)标记了四个代码行,这些数字指的是代码后面出现的问题。谢谢。

// package myPackage;  // **1**

import myOtherPackage.*;

class mainProject{  // **2**

    // **3**
    private int myVar;

    mainProject(){
        myVar = 0;
    }

    public static void main(String args[]){

        // Keep main() looking fairly simple?
        // Perhaps just have some "essentials" here, such as error handling?

        new mainProject().start();  // **4**
    }

    private void start(){
        // The project gets going here..
    }
}

1 与我项目中的其他类文件不同,我没有为“main()类”文件指定包名。这是一个糟糕的设计选择吗?

2 “主要课程”是否有良好的命名惯例?将“main”这个词加入到这个类名中是否有帮助?像“mainProject”这样的大概是个好主意吗?

3 各种编码结构可以出现在主类文件中。例如,局部变量,构造函数,main()方法和本地方法。他们是否有“最佳订单”出现在此文件中?

4 是否值得保持main()方法看起来相当“精简和简单”?在这个例子中,我刚刚调用了一个名为start()的本地私有方法,该方法用于启动项目。

6 个答案:

答案 0 :(得分:5)

好的,这是我在专业项目中的表现。

对于1.每个班级都应该有一个包。主要或没有主要没有区别。包是java在运行时以命名空间的形式组织类的方式。因此,如果您停止提供包,那么您最终可能会在同一文件夹或jar中使用两个具有相同名称的类文件,当发生这种情况时,JVM会选择通过类路径上的名称找到的第一个类。这可能不是你想要的那个。

对于2. main(特别是public static void main(String[] args)是Java需要的特定和标准签名。任何可运行的程序,生成输出并且可以执行的程序需要具有此签名的main方法。我将尝试解释签名,这可能会帮助你理解为什么会这样。

它是公共的,因为您希望JVM运行时代码执行该方法。使用privateprotected将不允许JVM代码查看您的方法。

它是静态的,因为如果没有static,JVM代码将需要您的类的实例来实际访问该方法。请记住,只需使用类名即可访问静态方法和字段。但是,非静态成员需要有效的活动对象才能访问它们。

它是无效的,因为main不向其调用者返回任何内容。这就像任何具有void返回类型的方法一样。

它被称为main因为Java创建者想要给它这个名字。执行此方法的JVM运行时代码需要知道将启动执行的方法名称。现在,如果我把它命名为任何东西,那么JVM代码就不可能做出疯狂猜测。因此,名称标准化要求标准名称和Java创建者坚持main

String[]实际上是一个字符串数组,包含传递给程序的命令行参数。 args是参数的名称,具有讽刺意味的是,这是您可以更改为任何名称的唯一名称。

为了命名主类,我通常更喜欢像MyProjectLauncher或MyProjectBootstrap这样的名字,其中myProject是你的项目名称,如tomcat或bigben或你喜欢的任何东西。

对于3.标准惯例是:

public class MyClass{

    //private members

    //protected members

    //constructors

    //private methods

    //protected methods

    //public methods

    //hashcode and equals

    //toString overrides
}

您可以选择所需内容并删除所需内容。如果使用变量,公共方法还包括变量的getter和setter。

For 4.在设计类时,您需要牢记代码的可伸缩性和可管理性。在项目开始时有一个main类和几个类是很常见的,然后当它们成长为数千行的超大袋鼠时,然后重构代码来调整它。您应该做的是根据功能,服务助手或操作创建类。将main分开放在另一个班级中。只需使用main初始化一些内容,解析命令行选项并委托启动或初始化方法,该方法将执行其余操作以启动程序。

希望这有帮助。

答案 1 :(得分:1)

1是的,你应该总是使用包裹。但是不要在其中使用camelcase ...所以myotherpackage而不是myOtherpackage。

2是的,合并单词main是一个很好的惯例,例如MyApplicationMain。请记住,班级名称以大写字母开头。

3是的,共同的顺序是静态,成员,构造函数,方法,就像你已经

4是的!这样可以实现更好的测试,并且您不应该使用静态上下文超过您需要的时间。

如果你添加一个包裹并接受我的大写字母提示,我认为你上面的内容绝对没问题。

答案 2 :(得分:1)

  1. 通常,最好定义自己的包,以避免与类路径上的任何其他类命名冲突。这也适用于主类。想象一下,如果你的依赖关系中的其他地方有一个类,其创建者使用相同的方法将它保留在默认包中会发生什么。所以,是的,把iinto包装好。

  2. 命名保留在您的纬度,但Java编码约定肯定会促使您大写该类的名称。因此,MainMainProjectEntryPoint将是更好的选择。

  3. 我认为你将字段和方法称为类的成员。请注意,局部变量和局部方法具有完全不同的含义(它们不是类本身的成员)。通常的排序是静态字段,实例字段,静态方法构造函数,实例方法。我认为没有强烈的惯例,但这些都是习惯。

  4. 值得保持任何方法简洁明了;)

答案 3 :(得分:1)

  • 始终使用package。无论。这是你的命名空间!

  • 请勿在包名中使用camelCase

  • 避免导入整个packages.*,更好地导入单个package.Clazz

  • 班级名称应始终为UpperCaseAndCamelCase

  • 在班级或方法名称与开头文章{之间留一个空格,提高了可读性。

其余的似乎没问题。这或多或少是实用主义的问题。您的代码必须满足其编写目的,并且还需要可测试和可读(由其他人)。

所有这些标准将构成您或您的团队的规则集。

答案 4 :(得分:1)

  1. 如果其他人拥有同名的主要课程怎么办?除了最简单的测试程序之外,最好将它放在一个包中。
  2. 在课程名称中加入“Main”是一个好主意,因为它很快告诉读者这个课的目的,但是根据java language conventions
  3. ,“mainClass”应该是“MainClass”
  4. The usual order is variables, constructors, and methods in whatever order is reasonable
  5. 是的,保持主要方法小而易读。它中的逻辑应该主要与传递给程序的参数有关,甚至在它变得过大时也应该考虑到它。

答案 5 :(得分:1)

绝对应该使用1个包裹。最好是出于维护目的,如果你的项目随着时间的推移变大,那么主要使用的语法可能完全相同。包名称也应该有意义,并为相关的功能类提供简洁的包含。

2是的,最好在类名中加入main一词,并以大写字母开头。

通常,顺序是变量,构造函数,方法。

4保持主要简洁明了。你已经做过的代码越少越好。