Java的文件流定义,java文件流的问题!急
朋友你好,用使用 javadoc 標記可以做到。具體說明如下::
javadoc 標記是插入文檔注釋中的特殊標記,它們用于標識代碼中的特殊引用。javadoc 標記由“@”及其后所跟的標記類型和專用注釋引用組成。記住了,三個部分——@、標記類型、專用注釋引用。
不過我寧愿把它分成兩部分:@ 和標記類型、專用注釋引用。雖然 @ 和 標記類型之間有時可以用空格符分隔,但是我寧愿始終將它們緊挨著寫,以減少出錯機會。
javadoc 標記有如下一些:
標記 用于 作用
@author 對類的說明 標明開發該類模塊的作者
@version 對類的說明 標明該類模塊的版本
@see 對類、屬性、方法的說明 參考轉向,也就是相關主題
@param 對方法的說明 對方法中某參數的說明
@return 對方法的說明 對方法返回值的說明
@exception 對方法的說明 對方法可能拋出的異常進行說明
下面詳細說明各標記。
1。 @see 的使用
@see 的句法有三種:
@see 類名
@see #方法名或屬性名
@see 類名#方法名或屬性名
類名,可以根據需要只寫出類名 (如 String) 或者寫出類全名 (如 ng。
String)。那么什么時候只需要寫出類名,什么時候需要寫出類全名呢?
如果 java 源文件中的 import 語句包含了的類,可以只寫出類名,如果沒有包含,則需要寫出類全名。 ng 也已經默認被包含了。這和 javac 編譯 java 源文件時的規定一樣,所以可以簡單的用 javac 編譯來判斷,源程序中 javac 能找到的類,javadoc 也一定能找到;javac 找不到的類,javadoc 也找不到,這就需要使用類全名了。
方法名或者屬性名,如果是屬性名,則只需要寫出屬性名即可;如果是方法名,則需要寫出方法名以及參數類型,沒有參數的方法,需要寫出一對括號。如
成員類型 成員名稱及參數 @see 句法
屬性 number @see number
屬性 count @see count
方法 count() @see count()
方法 show(boolean b) @see show(boolean)
方法 main(String[] args) @see main(String[])
有時也可以偷懶:假如上例中,沒有 count 這一屬性,那么參考方法 count() 就可以簡寫成 @see count。
不過,為了安全起見,還是寫全 @see count() 比較好。
@see 的第二個句法和第三個句法都是轉向方法或者屬性的參考,它們有什么區別呢?
第二個句法中沒有指出類名,則默認為當前類。所以它定義的參考,都轉向本類中的屬性或者方法。
而第三個句法中指出了類名,則還可以轉向其它類的屬性或者方法。
關于 @see 標記,我們舉個例說明。由于 @see 在對類說明、對屬性說明、對方法說明時用法都一樣,所以這里只以對類說明為例。
/**
* @see String
* @see ng。
StringBuffer
* @see #str
* @see #str()
* @see #main(String[])
* @see Object#toString()
*/
public class TestJavaDoc {
}
生成的文檔的相關部分如下圖:
String 和 StringBuffer 都是在 ng 包中,由于這個包是默認導入了的,所以這兩個類可以直接寫類名,也可以寫類全名。
str、str() 為同名屬性和方法,所以方法名需要用 () 區分。main 是帶參數的方法,所以在 () 中指明了參數類型。toString() 雖然在本類中也有 (從 Object 繼承的),但我們是想參考 Object 類的 toString() 方法,所以使用了 Object#toString()。
奇怪的是,為什么其中只有 str、str() 和 main(String[]) 變成了鏈接呢?那是因為編譯時沒有把 ng 包或者 Stirng、StringBuffer、Object 三個類的源文件一起加入編譯,所以,生成的文檔沒有關于那三個類的信息,也就不可以建立鏈接了。
后面講解 javadoc 編譯命令的時候還會詳細說明。
上例中如果去把類中的 str 屬性去掉,那么生成的文檔又會有什么變化呢?你會發現,原來是 str, str(),而現在變成了 str(), str(),因為 str 屬性已經沒有了,所以 str 也表示方法 str()。
2。 使用 @author、@version 說明類
這兩個標記分別用于指明類的作者和版本。缺省情況下 javadoc 將其忽略,但命令行開關 -author 和 -version 可以修改這個功能,使其包含的信息被輸出。這兩個標記的句法如下:
@author 作者名
@version 版本號
其中,@author 可以多次使用,以指明多個作者,生成的文檔中每個作者之間使用逗號 (,) 隔開。
@version 也可以使用多次,只有第一次有效,生成的文檔中只會顯示第一次使用 @version 指明的版本號。如下例
/**
* @author Fancy
* @author Bird
* @version Version 1。
00
* @version Version 2。00
*/
public class TestJavaDoc {
}
生成文檔的相關部分如圖:
從生成文檔的圖示中可以看出,兩個 @author 語句都被編譯,在文檔中生成了作者列表。
而兩個 @version 語句中只有第一句被編譯了,只生成了一個版本號。
從圖上看,作者列表是以逗號分隔的,如果我想分行顯示怎么辦?另外,如果我想顯示兩個以上的版本號又該怎么辦?
——我們可以將上述兩條 @author 語句合為一句,把兩個 @version 語句也合為一句:
@author Fancy
Bird
@version Version 1。
00
Version 2。00
結果如圖:
我們這樣做即達到了目的,又沒有破壞規則。@author 之后的作者名和 @version 之后的版本號都可以是用戶自己定義的任何 HTML 格式,所以我們可以使用
標記將其分行顯示。
同時,在一個 @version 中指明兩個用
分隔的版本號,也沒有破壞只顯示第一個 @version 內容的規則。
3。 使用 @param、@return 和 @exception 說明方法
這三個標記都是只用于方法的。
@param 描述方法的參數,@return 描述方法的返回值,@exception 描述方法可能拋出的異常。它們的句法如下:
@param 參數名 參數說明
@return 返回值說明
@exception 異常類名 說明
每一個 @param 只能描述方法的一個參數,所以,如果方法需要多個參數,就需要多次使用 @param 來描述。
一個方法中只能用一個 @return,如果文檔說明中列了多個 @return,則 javadoc 編譯時會發出警告,且只有第一個 @return 在生成的文檔中有效。
方法可能拋出的異常應當用 @exception 描述。由于一個方法可能拋出多個異常,所以可以有多個 @exception。
每個 @exception 后面應有簡述的異常類名,說明中應指出拋出異常的原因。需要注意的是,異常類名應該根據源文件的 import 語句確定是寫出類名還是類全名。 示例如下:
public class TestJavaDoc {
/**
* @param n a switch
* @param b excrescent parameter
* @return true or false
* @return excrescent return
* @exception ng。
Exception throw when switch is 1
* @exception NullPointerException throw when parameter n is null
*/
public boolean fun(Integer n) throws Exception {
switch ( Value()) {
case 0:
break;
case 1:
throw new Exception("Test Only");
default:
return false;
}
return true;
}
}
使用 javadoc 編譯生成的文檔相關部分如下圖:
可以看到,上例中 @param b excrescent parameter 一句是多余的,因為參數只是一個 n,并沒有一個 b但是 javadoc 編譯時并沒有檢查。
因此,寫文檔注釋時一定要正確匹配參數表與方法中正式參數表的項目。如果方法參數表中的參數是 a,文檔中卻給出對參數 x 的解釋,或者再多出一個參數 i,就會讓人摸不著頭腦了。@exceptin 也是一樣。
上例程序中并沒有拋出一個 NullPointerException,但是文檔注釋中為什么要寫上這么一句呢,難道又是為了演示?這不是為了演示描述多余的異常也能通過編譯,而是為了說明寫異常說明時應考運行時 (RunTime) 異常的可能性。
上例程序中,如果參數 n 是給的一個空值 (null),那么程序會在運行的時候拋出一個 NullPointerException,因此,在文檔注釋中添加了對 NullPointerException 的說明。
上例中的 @return 語句有兩個,但是根據規則,同一個方法中,只有第一個 @return 有效,其余的會被 javadoc 忽略。
所以生成的文檔中沒有出現第二個 @return 的描述。
講到這里,該怎么寫文檔注釋你應該已經清楚了,下面就開始講解 javadoc 的常用命令。
運行 javadoc -help 可以看到 javadoc 的用法,這里列舉常用參數如下:
用法:
javadoc [options] [packagenames] [sourcefiles]
選項:
-public 僅顯示 public 類和成員
-protected 顯示 protected/public 類和成員 (缺省)
-package 顯示 package/protected/public 類和成員
-private 顯示所有類和成員
-d 輸出文件的目標目錄
-version 包含 @version 段
-author 包含 @author 段
-splitindex 將索引分為每個字母對應一個文件
-windowtitle 文檔的瀏覽器窗口標題
javadoc 編譯文檔時可以給定包列表,也可以給出源程序文件列表。
例如在 CLASSPATH 下有兩個包若干類如下:
fancy。Editor
fancy。Test
fancy。editor。ECommand
fancy。editor。EDocument
fancy。editor。
EView
這里有兩個包 (fancy 和 fancy。editor) 和 5 個類。那么編譯時 (Windows 環境) 可以使用如下 javadoc 命令:
javadoc fancy\Test。java fancy\Editor。
java fancy\editor\ECommand。java fancy\editor\EDocument。java fancy\editor\EView。java
這是給出 java 源文件作為編譯參數的方法,注意命令中指出的是文件路徑,應該根據實際情況改變。
也可以是給出包名作為編譯參數,如:
javadoc fancy fancy。editor
用瀏覽器打開生成文檔的 ml 文件即可發現兩種方式編譯結果的不同,如下圖:
用第二條命令生成的文檔被框架分成了三部分:包列表、類列表和類說明。
在包列表中選擇了某個包之后,類列表中就會列出該包中的所有類;在類列表中選擇了某個類之后,類說明部分就會顯示出該類的詳細文檔。而用第一條命令生成的文檔只有兩部分,類列表和類說明,沒有包列表。這就是兩種方式生成文檔的最大區別了。
下面再來細說選項。
-public、-protected、-package、-private 四個選項,只需要任選其一即可。它們指定的顯示類成員的程度。它們顯示的成員多少是一個包含的關系,如下表:
-private (顯示所有類和成員)
-package (顯示 package/protected/public 類和成員)
-protected (顯示 protected/public 類和成員)
-public (僅顯示 public 類和成員)
-d 選項允許你定義輸出目錄。
如果不用 -d 定義輸出目錄,生成的文檔文件會放在當前目錄下。-d 選項的用法是
-d 目錄名
目錄名為必填項,也就是說,如果你使用了 -d 參數,就一定要為它指定一個目錄。這個目錄必須已經存在了,如果還不存在,請在運行 javadoc 之前創建該目錄。
-version 和 -author 用于控制生成文檔時是否生成 @version 和 @author 指定的內容。不加這兩個參數的情況下,生成的文檔中不包含版本和作者信息。
-splitindex 選項將索引分為每個字母對應一個文件。
默認情況下,索引文件只有一個,且該文件中包含所有索引內容。當然生成文檔內容不多的時候,這樣做非常合適,但是,如果文檔內容非常多的時候,這個索引文件將包含非常多的內容,顯得過于龐大。使用 -splitindex 會把索引文件按各索引項的第一個字母進行分類,每個字母對應一個文件。
這樣,就減輕了一個索引文件的負擔。
-windowtitle 選項為文檔指定一個標題,該標題會顯示在窗口的標題欄上。如果不指定該標題,而默認的文檔標題為“生成的文檔(無標題)”。該選項的用法是:
-windowtitle 標題
標題是一串沒有包含空格的文本,因為空格符是用于分隔各參數的,所以不能包含空格。
同 -d 類似,如果指定了 -windowtitle 選項,則必須指定標題文本。
到此為止,Java 文檔和 javadoc 就介紹完了。javadoc 真的能讓我們在 Java 注釋上做文章——生成開發文檔。
Trackback:
。
全部
總結
以上是生活随笔為你收集整理的Java的文件流定义,java文件流的问题!急的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 14如何开启触感键盘iPh
- 下一篇: android状态机是线程么,Java中