首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

優良 Java 程式碼風格指南(下)

     編輯:Java 相關知識

前言

承接第一部分,本文將說明更多良好風格要素,並為本系列畫下句點。

原始碼檔案組織

一個良好的 Java 原始碼檔案建議依序包含:

  1. 檔案標頭註解(可選)
  2. 套件宣告
  3. 空行或分隔符
  4. Import 陳述句
  5. 空行或分隔符
  6. 類別定義

範例 1:不良檔案組織

package org.rotpad;
import java.awt.*;
import javax.swing.event.*;
import org.javacogs.*;
import javax.swing.*;
import java.awt.event.*;
class Foo { ... }
public class RotPad extends JFrame { ... }

範例 2:良好檔案組織

package org.rotpad;
// Java classes
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
// JavaCogs classes
import org.javacogs.*;

/**
 * RotPad is a simple GUI application for performing rotation ciphers on plain
 * text.
 *
 * @author Thornton Rose
 * @version 1.0
 */
public class RotPad extends JFrame { ... }

//-----------------------------------------------------------------------------
/**
 * Foo is ...
 *
 * @author Thornton Rose
 * @version 1.0
 */
class Foo { ... }

Import 陳述句組織

匯入類別眾多時,建議依下列順序分組並加註解:

  1. Java 標準類別 (java.*)
  2. Java 擴充類別 (javax.*)
  3. 第三方類別
  4. 專案類別

追求完美者可在各組內按字母排序。

範例 3:不良 Import 風格

import java.util.*;
import javax.swing.*;
import java.awt.event*;
import com.gensym.com.*;
import javax.swing.table.*;
import com.pv.jfcx.*;
import java.awt.*;
import com.melthorn.util.*;

範例 4a:良好 Import 風格(行尾註解)

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
import com.gensym.com.*; // BeanXporter
import com.pv.jfcx.*; // ProtoView
import com.melthorn.util.*; // Utilities

範例 4b:良好 Import 風格(區塊註解)

// Java classes
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
// BeanXporter
import com.gensym.com.*;
// ProtoView GUI components
import com.pv.jfcx.*;
// Application classes
import com.melthorn.util.*;

類別內部結構

建議順序:

  1. Javadoc 註解
  2. 類別宣告
  3. 欄位宣告
  4. 空行分隔
  5. 建構子
  6. 空行分隔
  7. 方法(main() 除外),邏輯分組
  8. 空行分隔
  9. 內部類別
  10. 空行分隔
  11. main() 方法

範例 5:不良類別風格

// RotPad -- GUI app. for ROT ciphering
public class RotPad extends JFrame {
    private static final String TRANSFORM_ROT13 = "ROT13";
    private static final String TRANSFORM_ROT13N5 = "ROT13N5";
    private static final String TRANSFORM_ROTASCII = "ROT-ASCII";
    private void jbInit() throws Exception { ... }
    public static final String TITLE = "RotPad";
    public static final String VERSION = "1.0";
    public static void main(String[] args) { ... }
    public RotPad() { ... }
    private JPanel jPanel1 = new JPanel();
    private JPanel jPanel2 = new JPanel();
    private BorderLayout borderLayout1 = new BorderLayout();
    ...
}

範例 6:良好類別風格

/**
 * RotPad is a simple GUI application for performing rotation ciphers on plain
 * text.
 *
 * @author Thornton Rose
 * @version 1.0
 */
public class RotPad extends JFrame {
    // Public constants
    public static final String TITLE = "RotPad";
    public static final String VERSION = "1.0";
    // Private constants
    private static final String TRANSFORM_ROT13 = "ROT13";
    private static final String TRANSFORM_ROT13N5 = "ROT13N5";
    private static final String TRANSFORM_ROTASCII = "ROT-ASCII";
    // GUI components [JBuilder generated]
    private BorderLayout borderLayout1 = new BorderLayout();
    private JPanel jPanel1 = new JPanel();
    private JPanel jPanel2 = new JPanel();
    ...

    /**
     * Construct a new instance of this class.
     */
    public RotPad() { ... }

    /**
     * Initialize UI components. [JBuilder generated]
     */
    private void jbInit() throws Exception { ... }

    ...
    //--------------------------------------------------------------------------
    /**
     * Start the application.
     */
    public static void main(String[] args) { ... }
}

欄位宣告規範

大量欄位時依存取層級與性質分組:

  1. Public constants
  2. Public variables
  3. Protected constants
  4. Protected variables
  5. Package constants
  6. Package variables
  7. Private constants
  8. Private variables

輔助準則:

  • 每行一個宣告。
  • Public/Protected 欄位至少加 Javadoc 註解。
  • 常數名稱全大寫。
  • IDE 產生的 GUI 欄位獨立區隔,利維護。

範例 7:不良欄位風格

public class CustomerSearchDialog extends JDialog {
    private JLabel firstNameLabel = new JLabel();
    private JLabel lastNameLabel = new JLabel();
    public static final RESULT_SELECT = 1;
    private Vector results = new Vector(); // Search results.
    private DefaultTableModel tableModel = new DefaultTableModel();
    public static final RESULT_CANCEL = 0;
    // ...
}

範例 8:良好欄位風格

/**
 * ...
 */
public class CustomerSearchDialog extends JDialog {
    /**
     * Indicates that search was cancelled; returned by showDialog() when
     * user clicks cancel button.
     */
    public static final RESULT_CANCEL = 0;
    /**
     * Indicates that a customer was selected; returned by showDialog() when
     * user clicks select button.
     */
    public static final RESULT_SELECT = 1;
    private Vector results = new Vector(); // Search results.
    private DefaultTableModel tableModel = new DefaultTableModel(); // Grid model.
    // GUI fields. [JBuilder]
    private JLabel firstNameLabel = new JLabel();
    private JLabel lastNameLabel = new JLabel();
    // ...
}

方法宣告規範

  • 務必有 Javadoc 或標頭註解。
  • 存取修飾字放最前。
  • 行過長時換行。
  • 參數過多時每行一個。
  • 方法名與左括號間無空白。
  • 右括號與左大括號間有空白(可換行)。

範例 9:不良方法風格

public int getTypeCount (String custType)
{
    ...
}
static public getInstance(){ ... };
public void showRange()
throws RangeException {
    ...
}

範例 10:良好方法風格


/**
 * Return the single instance of this class.
 */
public static CalculationEngine getInstance() {
    return instance;
}

/**
 * Calculate the consumption coefficient.
 */
public float calculateConsumptionCoefficient(int base, float variance,
    int iterations) throws RangeException {
    // ...
}

/**
 * Calculate the consumption coefficient.
 */
public float calculateConsumptionCoefficient(
    int base,
    float variance,
    int iterations)
    throws RangeException
{
    // ...
}

結語

無論遵循何種規範,撰寫程式碼的終極目標應是:讓他人能理解並維護。這才是風格的真諦。

相關連結與作者

同第一部分。作者 Thornton Rose,聯絡信箱 thornton.rose@mindspring.com。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved