目前,我的“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()的本地私有方法,该方法用于启动项目。
答案 0 :(得分:5)
好的,这是我在专业项目中的表现。
对于1.每个班级都应该有一个包。主要或没有主要没有区别。包是java在运行时以命名空间的形式组织类的方式。因此,如果您停止提供包,那么您最终可能会在同一文件夹或jar中使用两个具有相同名称的类文件,当发生这种情况时,JVM会选择通过类路径上的名称找到的第一个类。这可能不是你想要的那个。
对于2. main(特别是public static void main(String[] args)
是Java需要的特定和标准签名。任何可运行的程序,生成输出并且可以执行的程序需要具有此签名的main方法。我将尝试解释签名,这可能会帮助你理解为什么会这样。
它是公共的,因为您希望JVM运行时代码执行该方法。使用private
或protected
将不允许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)
通常,最好定义自己的包,以避免与类路径上的任何其他类命名冲突。这也适用于主类。想象一下,如果你的依赖关系中的其他地方有一个类,其创建者使用相同的方法将它保留在默认包中会发生什么。所以,是的,把iinto包装好。
命名保留在您的纬度,但Java编码约定肯定会促使您大写该类的名称。因此,Main
或MainProject
或EntryPoint
将是更好的选择。
我认为你将字段和方法称为类的成员。请注意,局部变量和局部方法具有完全不同的含义(它们不是类本身的成员)。通常的排序是静态字段,实例字段,静态方法构造函数,实例方法。我认为没有强烈的惯例,但这些都是习惯。
值得保持任何方法简洁明了;)
答案 3 :(得分:1)
始终使用package
。无论。这是你的命名空间!
请勿在包名中使用camelCase
。
避免导入整个packages.*
,更好地导入单个package.Clazz
。
班级名称应始终为UpperCaseAndCamelCase
。
在班级或方法名称与开头文章{
之间留一个空格,提高了可读性。
其余的似乎没问题。这或多或少是实用主义的问题。您的代码必须满足其编写目的,并且还需要可测试和可读(由其他人)。
所有这些标准将构成您或您的团队的规则集。
答案 4 :(得分:1)
答案 5 :(得分:1)
绝对应该使用1个包裹。最好是出于维护目的,如果你的项目随着时间的推移变大,那么主要使用的语法可能完全相同。包名称也应该有意义,并为相关的功能类提供简洁的包含。
2是的,最好在类名中加入main一词,并以大写字母开头。
通常,顺序是变量,构造函数,方法。 4保持主要简洁明了。你已经做过的代码越少越好。