Java中对象的命名规范

14

我两年前开始学习Java编程。当时项目中的资深成员建议我在创建对象的名称后添加“obj”。

例如:

Car objCar = new Car("Ferrari");

这里我谈论的是objCar。但是在Stack Overflow上,许多人反对这样做,现在我发现这不应该是对象命名的方式。当使用集合时,我清楚命名约定,但是当创建一般类的对象时,我感到困惑。

有人能解释一下吗?


2
Java中除了原始类型之外,其他都是对象。你会在每个变量名前加上“obj”吗? - Gabe
这个 obj... 的东西来自旧时代。 - juergen d
1
如果您更容易识别您的属性,为什么不使用“obj”呢? - Neifen
有人能告诉我遵循的标准是什么吗? - Anuj Balan
1
请查看此链接:http://www.iwombat.com/standards/JavaStyleGuide.html。 - Zaz Gmy
4
“对象”没有名称,“变量”有名称。 - Jesper
7个回答

28

只需称其为car。Sun/Oracle不使用匈牙利命名法

以描述其用途的方式命名您的变量。但是您不需要在变量名称中指示类型。您已经在变量声明中指定了类型。如果您将鼠标悬停在变量上,IDE将向您显示变量的类型,因此该信息始终可以轻松获得。

您应该使用lowercaseStartingCamelCase作为变量名和方法名,而使用UppercaseStartingCamelCase作为类名。

如果您想要阅读Sun/Oracle的做法,可以阅读他们的Java编程语言代码约定


在命名对象时遵循什么标准?只是以小写字母开头的类名吗? - Anuj Balan
@Ajj 请考虑给它取一个有意义的名字,比如它是用来做什么的。这是“标准”。如果你指的是语法标准,变量名称以小写字母开头,并使用驼峰命名法。 - Peter C
我对访问器和修改器方法的命名没有问题。我只是对像“Car”、“Student”、“Machine”这样的一般类感到困惑。 - Anuj Balan
1
将其命名为实际使用的名称,而不是类名。对此没有一般规则。 - Louis Wasserman
谢谢链接,Greg。之前浏览过,但没有帮助我澄清疑惑。不管怎样,现在我明白了匈牙利命名法应该完全被省略。 - Anuj Balan

5
您的例子有些过于琐碎了。实际上,您永远不会将对象类型的字段命名为“Car”,也永远不会将“Integer”类型命名为“integer”。相反,使用名称告诉读者该字段的用途。一些示例:
private Transport preferredTransportMethod;

private int invoiceCounter;

前缀字段类型在Java中并不常用。然而,类成员有时会以小写字母“m”作为前缀,以防止在setter方法中意外自我赋值。

private long mTripDurationMillis;

2

给你的对象起名字时,要起对应的名称,这样阅读和重构会更容易。


1
Java中对象的命名约定只是名称而已。 例如:
Car car = new Car("Ferrari");

匈牙利命名法的残留之处已经被抛弃,主要是因为IDE提供了导航的增强支持。


1

类名小写是Sun/Oracle标准。

当你在公司工作时,

根据项目命名约定可能会有所不同。

Car car=new Car(); //good to follow

如果是单例模式,你可以像下面这样命名

 private static final Car singletonCar=new Car();

1
单例模式不应该在字段名称中被标识出来。它们是单例的事实只有在字段初始化时才应该可见。如果需要其他东西,那么这就是某些事情做错了的信号。在你的例子中,错误的地方在于允许多个Car单例的实例存在。 - Torben
编辑过的。有许多创建单例的方法,这只是其中一种。这种命名约定仅为了可读性而保留。 - Balaswamy Vaddeman
1
单例模式的思想是只能初始化一个对象实例。final字段并不能防止你创建两个Car对象,你必须在Car对象本身中构建限制。单例的初始化已经有很好的文档记录,请谷歌一下。一旦你获得了对单例的引用,在字段名称中不需要将其标记为单例。单例应该以强大的方式实现,使用户在初始化后不必知道它的存在。它应该像其他被多个线程共享的对象一样运作。 - Torben
我再次强调,创建单例的方法有很多种,这只是其中一种,当然也是传统的方式。你可以查看维基百科链接来了解有关单例的讨论,但这里不是讨论的重点。此外,当我提供singletonCar时,它是为所有团队成员准备的。在团队中工作时,团队成员的知识水平可能不同,我们不能假设他们都具有相同的知识水平。这是为了代码的可读性和可维护性。 - Balaswamy Vaddeman

0
如果你使用更多的对象,我会这样做:
Car carFerrari = new Car("Ferrari");
Car carFord = new Car("Ford");
Car carAudi = new Car("Audi");

当然,这些名称可以是“法拉利”,“福特”和“奥迪”,但我喜欢引用相同类型的对象。


-1

既然您是资深人士,我可以为您提供一些与您疑虑相关的命名约定建议。我们知道所有类名都以大写字母开头,例如类"MyTest",当我们需要创建该类的对象时,应该将其命名为"mytest"。对象名称应按此格式命名。根据Jakarta项目宣言,我发现这种类型的约定,并且它们如下所示。除Jakarta外,Sun API包括用于开发的IDE也在使用此约定。希望这能帮到您。是的,我是新手。感谢您提供的有用信息。


Manoj,看起来你是SO的新手。在SO中,“Dear”等用语不被支持,回答也不需要进行代码格式化。 - kosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接