---
# System prepended metadata

title: Oracle/Sun Microsystems 建議的 Java 源代碼結構
tags: [java]

---

# Oracle/Sun Microsystems 建議的 Java 源代碼結構

[TOC]

###### tags: `java`

---

- 應由 blank line<SUP>(空行)</SUP>分隔 sections<SUP>(段落)</SUP>並為 sections<SUP>(段落)</SUP>加上 comments<SUP>(註解)</SUP>。
- 盡量避免超過 2000 行。

:::info
每個 Java 源代碼檔案都包含一個 `public class` 或 `public interface`，當有 `private class` 或 `private interface` 時可將它(們)放在與 `public class` 同一個 Java 源代碼檔案中。
:::

## 檔首註解

All source files should begin with a c-style comment that lists the class name, version information, date, and copyright notice:

```java
/*
 * Classname
 * 
 * Version information
 *
 * Date
 * 
 * Copyright notice
 */
```

## Package and Import Statements

The first non-comment line of most Java source files is a package statement. After that, import statements can follow.

```java
package java.awt;

import java.awt.peer.CanvasPeer;
```

## Class and Interface Declarations

1. Class/interface documentation comment
```java
/**
 *
 */
```

2. class or interface statement
```java
public class Clazz implements Serializable {
```

3. Class (`static`) variables
	3.1 `public`
	3.2 `protected`
	3.3 package level (no access modifier)
	3.4 private
```java
	public static String SOMETHING_OPEN_TO_THE_WORLD = …;

	protected static String SOMETHING_OPEN_TO_THE_PACKAGE = …;

	static String SOMETHING_OPEN_TO_WTF = …;

	private static String SOMETHING_OPEN_TO_ITSELF = …;
```

4. Instance variables
	4.1 `public`
	4.2 `protected`
	4.3 package level (no access modifier)
	4.4 private
```java
	public String SOMETHING_OPEN_TO_THE_WORLD;

	protected String SOMETHING_OPEN_TO_THE_PACKAGE;

	SOMETHING_OPEN_TO_WTF;

	private String SOMETHING_OPEN_TO_ITSELF;
```

5. Constructors

```java
	public Clazz() {
	}
```

6. Methods
> These methods should be grouped by functionality rather than by scope or accessibility. For example, a private class method can be in between two public instance methods. The goal is to make reading and understanding the code easier.

## Google Style Guide

```
public protected private abstract default static final transient volatile synchronized native strictfp
```

## 參考資料來源

1. [3 - File Organization](https://www.oracle.com/java/technologies/javase/codeconventions-fileorganization.html)
