java注釋

java注釋

在Java的編寫過程中我們需要對一些程式進行注釋,除了自己方便閱讀,更為別人更好理解自己的程式,所以我們需要進行一些注釋,可以是編程思路或者是程式的作用,總而言之就是方便自己他人更好的閱讀。

主要種類

對於Java注釋我們主要了解三種:

1, // 注釋一行

2, /* ...... */ 注釋若干行

3, /**……*/文檔注釋

說明

/** ...... */ 注釋若干行,並寫入 javadoc文檔通常這種注釋的多行寫法如下:

/**

* .........

* .........

*/

javadoc提取注釋的工具/**注釋內容*/ (其餘兩種和C++注釋一樣).

註:注釋內容即不會被編譯的內容,只是解釋說明

注釋例子

import java.awt.*; //調用awt包

import java.applet.*;

import java.awt.Color; //調用awt中的Color類

public class extends Applet implements Runnable {

Image buffer;// 定義圖像對象

Graphics gContext;// 定義圖形上下文

Thread animate;// 定義一個執行緒

String s = "這是文字動畫";

int w, h, x, y, size = 12; // 定義整形變數並賦值

/**

* Applet初始化

*

* @see java.applet.Applet

* @return 無

*/

public void init() {

w = getWidth();// 返回組件的當前寬度。

h = getHeight();// 返回組件的當前高度。

buffer = createImage(w, h);// 創建一個寬W高H的圖形區域。 (創建一幅用於雙緩衝的、可在螢幕外繪製的圖像)

gContext = buffer.getGraphics();// 獲得圖像使用的圖形上下文

gContext.setColor(Color.blue);// 設定圖形上下文的當前顏色為藍色

}

/**

* Thread 執行緒啟動操作

*/

public void start() {

// 開始animate執行緒

if (animate == null) {

animate = new Thread(this);

animate.start();

}

}

/**

* Thread 執行緒終止時的處理操作 以釋放資源

*/

public void stop() {

// 結束animate執行緒

if (animate != null)

animate = null;

}

/**

* Runnable接口的實現

* 執行所需的操作

*/

public void run() {

while (true) {

//X,Y的坐標設定

x = (w - s.length() * size) / 2;

y = (h + size) / 2;

gContext.setFont(new Font("宋體", Font.PLAIN, size));

gContext.drawString(s, x, y);//繪製一串字元s內容的文本

repaint();//重畫圖形

try {

animate.sleep(50);//執行緒休眠50ms

} catch (InterruptedException e) {// 捕獲異常

}

gContext.clearRect(0, 0, w, h);//通過使用當前繪圖表面的背景色進行填充來清除指定的矩形.0 - 要清除矩形的x 坐標。0 - 要清除矩形的 y 坐標。w - 要清除矩形的寬度。h - 要清除矩形的高度。

if (++size > 40)

size = 12;

}

}

/**

* Applet畫圖操作方法

*

* @see java.applet.Applet

*/

public void paint(Graphics g) {

g.drawImage(buffer, 0, 0, this);//繪製指定的buffer的圖像

}

/**

* Applet刷新操作,重新繪製圖形

*

* @see java.applet.Applet

*/

public void update(Graphics g) {

paint(g);//重新調用paint函式繪製圖形

}

}

作用

通過注釋提高Java源程式代碼的可讀性;使得Java程式條理清晰,易於區分代碼行與注釋行。另外通常在程式開頭加入作者,時間,版本,要實現的功能等內容注釋,方便後來的維護以及程式設計師的交流。

速算遊戲

規則如下:

1、點擊“開始遊戲”按鈕,遊戲開始,系統會發出四張牌

2、並把組合的表達式(四張牌的四則混合運算表達式)輸入到輸入框裡(最終結果=24)

3、點擊“確定”按鈕,遊戲將會計算你輸入的表達式是否正確,並且給出提示

4、如果輸入的表達式不正確,則會讓用戶重新輸入,如果輸入的表達式正確,則重新開始遊戲

猜數字

模組注釋

1、源檔案注釋

源檔案注釋採用 /** …… */,在每個源檔案的頭部要有必要的注釋信息,包括:檔案名稱;檔案編號;版本號;作者;創建時間;檔案描述包括本檔案歷史修改記錄等。中文注釋模版:

/**

* 文 件 名 :

* CopyRright

* 檔案編號:

* 創 建 人:

* 日 期:

* 修 改 人:

* 日 期:

* 描 述:

* 版 本 號:

*/

類(模組)注釋:

類(模組)注釋採用 /** …… */,在每個類(模組)的頭部要有必要的注釋信息,包括:工程名;類(模組)編號;命名空間;類可以運行的JDK版本;版本號;作者;創建時間;類(模組)功能描述(如功能、主要算法、內部各部分之間的關係、該類與其類的關係等,必要時還要有一些如特別的軟硬體要求等說明);主要函式或過程清單及本類(模組)歷史修改記錄等。

英文注釋模版:

/**

* CopyRright

* Project:

* Module ID:

* Comments:

* JDK version used:

* Namespace:

* Author:

* Create Date:

* Modified By:

* Modified Date:

* Why & What is modified

* Version:

java註解

Annotation(註解)是JDK5.0及以後版本引入的。它可以用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。註解是以‘@註解名’在代碼中存在的,根據註解參數的個數,我們可以將註解分為:標記註解、單值註解、完整註解三類。它們都不會直接影響到程式的語義,只是作為註解(標識)存在,我們可以通過反射機制編程實現對這些元數據的訪問。另外,你可以在編譯時選擇代碼里的註解是否只存在於原始碼級,或者它也能在class檔案中出現。

元數據的作用

如果要對於元數據的作用進行分類,大致可分為三類:

編寫文檔:通過代碼里標識的元數據生成文檔。

代碼分析:通過代碼里標識的元數據對代碼進行分析。

編譯檢查:通過代碼里標識的元數據讓編譯器能實現基本的編譯檢查

內置註解

@Override

Java代碼

packagecom.iwtxokhtd.annotation;

/**

* 測試Override註解

* @authorAdministrator

*

*/

public classOverrideDemoTest {

//@Override

publicString tostring(){

return"測試註解";

}

}

@Deprecated的作用是對不應該在使用的方法添加註解,當編程人員使用這些方法時,將會在編譯時顯示提示信息,它與javadoc里的@deprecated標記有相同的功能,準確的說,它還不如javadoc @deprecated,因為它不支持參數,使用@Deprecated的示例代碼示例如下:

Java代碼

packagecom.iwtxokhtd.annotation;

/**

* 測試Deprecated註解

* @authorAdministrator

*

*/

public classDeprecatedDemoTest {

public static voidmain(String[] args) {

//使用DeprecatedClass里聲明被過時的方法

DeprecatedClass.DeprecatedMethod();

}

}

classDeprecatedClass{

@Deprecated

public static voidDeprecatedMethod() {

}

}

@SuppressWarnings,其參數有:

deprecation,使用了過時的類或方法時的警告

unchecked,執行了未檢查的轉換時的警告

fallthrough,當 Switch 程式塊直接通往下一種情況而沒有 Break 時的警告

path,在類路徑、源檔案路徑等中有不存在的路徑時的警告

serial,當在可序列化的類上缺少serialVersionUID 定義時的警告

finally ,任何 finally 子句不能正常完成時的警告

all,關於以上所有情況的警告

Java代碼

packagecom.iwtxokhtd.annotation;

importjava.util.ArrayList;

importjava.util.List;

public classSuppressWarningsDemoTest {

public staticList list= newArrayList();

@SuppressWarnings("unchecked")

public voidadd(String data){

list.add(data);

自定義

它類似於新創建一個接口類檔案,但為了區分,我們需要將它聲明為@interface,如下例:

Java代碼

packagecom.iwtxokhtd.annotation;

public @interfaceNewAnnotation {

}

使用自定義的註解類型

Java代碼

packagecom.iwtxokhtd.annotation;

public classAnnotationTest {

@NewAnnotation

public static voidmain(String[] args) {

}

}

為自定義註解添加變數

Java代碼

packagecom.iwtxokhtd.annotation;

public @interfaceAnnotation {

String value();

}

Java代碼

public classAnnotationTest {

@NewAnnotation("main method")

public static voidmain(String[] args) {

saying();

}

@NewAnnotation(value = "say method")

public static voidsaying() {

}

}

定義一個枚舉類型,然後將參數設定為該枚舉類型,並賦予默認值

public @interfaceGreeting {

public enum

FontColor {

BLUE, RED, GREEN

};

String name();

FontColor fontColor() defaultFontColor. RED;

}

這裡有兩種選擇,其實變數也就是在賦予默認值的參數上,我們可以選擇使用該默認值,也可以重新設定一個值來替換默認值

Java代碼

public classAnnotationTest {

@NewAnnotation("main method")

public static voidmain(String[] args) {

saying();

sayHelloWithDefaultFontColor();

sayHelloWithRedFontColor();

}

@NewAnnotation("say method")

public static voidsaying() {

}

// 此時的fontColor為默認的RED

@Greeting(name = "defaultfontcolor")

public static voidsayHelloWithDefaultFontColor() {

}

@Greeting(name = "notdefault", fontColor = Greeting.FontColor. BLUE)

public static voidsayHelloWithRedFontColor() {

}

高級套用

1.1. 限制註解的使用範圍

用@Target指定ElementType屬性

Java代碼(jdk)

packagejava.lang.annotation;

public enum ElementType {

TYPE,

// 用於類,接口,枚舉但不能是註解

FIELD,

// 欄位上,包括枚舉值

METHOD,

// 方法,不包括構造方法

PARAMETER,

// 方法的參數

CONSTRUCTOR,

//構造方法

LOCAL_VARIABLE,

// 本地變數或catch語句

ANNOTATION_TYPE,

// 註解類型(無數據)

PACKAGE

// Java包

}

1.2. 註解保持性策略

Java代碼

//限制註解使用範圍

@Target({ElementType.METHOD,ElementType.CONSTRUCTOR})

public @interface Greeting {

//使用枚舉類型

public enum FontColor{

BLUE,RED,GREEN

};

String name();

FontColor fontColor() defaultFontColor.RED;

}

在Java編譯器編譯時,它會識別在原始碼里添加的註解是否還會保留,這就是RetentionPolicy。下面是Java定義的RetentionPolicy枚舉:

編譯器的處理有三種策略:

將註解保留在編譯後的類檔案中,並在第一次載入類時讀取它

將註解保留在編譯後的類檔案中,但是在運行時忽略它

按照規定使用註解,但是並不將它保留到編譯後的類檔案中

Java代碼

packagejava.lang.annotation;

public enum RetentionPolicy{

SOURCE,

// 此類型會被編譯器丟棄

CLASS,

// 此類型註解會保留在class檔案中,但JVM會忽略它

RUNTIME

// 此類型註解會保留在class檔案中,JVM會讀取它

}

Java代碼

//讓保持性策略為運行時態,即將註解編碼到class檔案中,讓虛擬機讀取

@Retention(RetentionPolicy.RUNTIME)

public @interface Greeting {

//使用枚舉類型

public enum FontColor{

BLUE,RED,GREEN

};

String name();

FontColor fontColor() defaultFontColor.RED;

}

1.3. 文檔化功能

Java提供的Documented元註解跟Javadoc的作用是差不多的,其實它存在的好處是開發人員可以定製Javadoc不支持的文檔屬性,並在開發中套用。它的使用跟前兩個也是一樣的,簡單代碼示例如下:

Java代碼

//讓它定製文檔化功能

//使用此註解時必須設定RetentionPolicy為RUNTIME

@Documented

public @interface Greeting {

//使用枚舉類型

public enum FontColor{

BLUE,RED,GREEN

};

String name();

FontColor fontColor() defaultFontColor.RED;

}

1.4. 標註繼承

Java代碼

//讓它允許繼承,可作用到子類

@Inherited

public @interface Greeting {

//使用枚舉類型

public enum FontColor{

BLUE,RED,GREEN

};

String name();

FontColor fontColor() defaultFontColor.RED;

}

2. 讀取註解信息

屬於重點,在系統中用到註解許可權時非常有用,可以精確控制許可權的粒度

注意:要想使用反射去讀取註解,必須將Retention的值選為Runtime

Java代碼

packagecom.iwtxokhtd.annotation;

importjava.lang.annotation.Annotation;

importjava.lang.reflect.Method;

//讀取註解信息

public classReadAnnotationInfoTest {

public static voidmain(String[] args) throws Exception {

// 測試AnnotationTest類,得到此類的類對象

Class c = Class. forName("com.iwtxokhtd.annotation.AnnotationTest");

// 獲取該類所有聲明的方法

Method[] methods =c.getDeclaredMethods();

// 聲明註解集合

Annotation[] annotations;

// 遍歷所有的方法得到各方法上面的註解信息

for(Method method : methods) {

// 獲取每個方法上面所聲明的所有註解信息

annotations =method.getDeclaredAnnotations();

// 再遍歷所有的註解,列印其基本信息

System. out.println(method.getName());

for(Annotation an :annotations) {

System. out.println("方法名為:" + method.getName()+ " 其上面的註解為:"

+an.annotationType().getSimpleName());

Method[] meths =an.annotationType().getDeclaredMethods();

// 遍歷每個註解的所有變數

for(Method meth :meths) {

System. out.println("註解的變數名為:" + meth.getName

註解注釋

注釋有三種:// /* */ /** */ 前兩種編譯器直接跳過,從來不閱讀,第三種編譯器是可以看懂的,當你使用javadoc這樣的命令時會用到,用來生成API時用的。

註解:這東東完全就是給編譯器看的。 比如@Ovrride表示這個方法是重寫了父類中的方法,而不是自定義的,所以這個時候編譯器會去檢查你的方法名是否和父類一樣,是否寫錯了。

以上是不同的概念

相關詞條

相關搜尋

熱門詞條

聯絡我們