2

当我用 Java 编写一个类时,它(几乎)总是看起来像这样:

public class MyClass {

    // attributes

    // constructors

    // methods:
    //   * "interesting" methods
    //   * getters and setters
    //   * toString / equals / hashCode
}

特别是,我总是在开头写下所有属性。

有没有约定如何在 Java 中构造类?

我在Oracle Code Conventions中找不到它。我对资源(例如其他风格指南,如Mozilla Coding Style或书籍)感兴趣,因为我是一名 Java 导师,我想给我的学生更多的东西,而不是“我是这样学的,所以你也应该这样做” . 如果有理由/来源提出类中的其他结构,我也很高兴知道这一点。

编辑:虽然我对你的想法很感兴趣,但我想我应该强调我期待消息来源。个人经验很有趣,但我也做了上面的结构很常见的经验。但我想给我的学生一些比模糊印象更多的东西,每个人似乎都在使用这种结构。特别是,因为他们中的一些人不使用它。

4

5 回答 5

1

您应该更仔细阅读:您在第 3.1.3 节中链接到的 Oracle 编码约定:

下表按出现的顺序描述了类或接口声明的各个部分。有关包含注释的示例,请参见第 19 页的“Java 源文件示例”。

  1. 类/接口文档注释(/**...*/)

    请参阅第 9 页的“文档注释”以了解有关此注释的内容的信息。

  2. 类或接口语句

  3. (/*...*/)如有必要,类/接口实现注释

    此注释应包含不适合类/接口文档注释的任何类范围或接口范围的信息。

  4. 类(静态)变量

    首先是公共类变量,然后是受保护的,然后是私有的。

  5. 实例变量

    首先是公共的,然后是受保护的,然后是私有的。

  6. 构造函数

  7. 方法

    这些方法应该按功能分组,而不是按范围或可访问性分组。例如,私有类方法可以位于两个公共实例方法之间。目标是使阅读和理解代码更容易。

也就是说,这个约定已经过时了,通常不遵循细则。例如,按可访问性排序字段似乎很奇怪,但按功能排序方法。事实上,我很少在专业代码中看到按可访问性排序的字段。不过,在专业代码中,项目符号的顺序非常普遍。

于 2013-01-20T15:30:12.517 回答
1

没有the only约定如何组织您的课程来源。您列出的结构非常常见-首先是属性,然后是构造函数,然后是方法。但是,有些团队喜欢将属性保留在类的尾部,有些团队正在将字段定义与其 setter 和 getter 混合在一起。团队应该在内部就一些约定达成一致,以保持其所有来源看起来相似。

于 2013-01-20T14:52:52.067 回答
0

您可以使用 Checkstyle (http://checkstyle.sourceforge.net/) 之类的工具。

它包含对类结构的一些检查(例如修饰符的顺序http://checkstyle.sourceforge.net/config_modifier.html,命名约定http://checkstyle.sourceforge.net/config_naming.html等)。

这不是呈现编码约定的最佳方式。但实际的优势是 Checkstyle 可以直接在您的 IDE 或自动构建中使用,因此您的学生可以看到它们直接应用于他们的代码。

于 2013-01-20T16:03:09.880 回答
0

与每种语言一样,除了语言规范(如果存在)以及团队或项目的本地约定之外,没有其他权威来源。Java 语言规范没有强制规定成员的特定顺序。

于 2013-01-20T15:40:40.060 回答
-1

我不能支持这一点,但我相信在类的开头声明成员变量,然后是构造函数是适用于所有语言的唯一“约定”。我使用引号是因为它很自然地完成,好像这是将它们放在对象定义中的唯一合乎逻辑的方式(不像其他东西,例如 C++ 样式括号等)

于 2013-01-20T14:58:45.777 回答