java獲取注釋
『壹』 java 中的幾種注釋方式
我看動力節點的java基礎大全301集教中的三種注釋方法:
1、單行注釋 //注釋的內容
2、多行注釋/*......*/
3、/**......*/,這種方式和第二種方式相似。這種格式是為了便於javadoc程序自動生成文檔。
下面介紹一下Javadoc的標記:
特別聲明:
(1)javadoc針對public類生成注釋文檔
(2)javadoc只能在public、protected修飾的方法或者屬性之上
(3)javadoc注釋的格式化:前導*號和HTML標簽
(4)javadoc注釋要僅靠在類、屬性、方法之前
下面主要舉例說明第三種注釋的應用:
(1)首先編寫.java文件
(2)在命令行中執行以下dos命令:
javadoc *.java //根據相應的Java源代碼及其說明語句生成HTML文檔
//javadoc標記:是@開頭的,對javadoc而言,特殊的標記。
(3)在當前目錄下就會產生doc文件夾,裡面有一系列的.html文件
附上代碼:
[java]view plain
<spanstyle="font-size:18px;">*/
/**javadoc注釋的內容
*/
publicclassHello{
/**屬性上的注釋*/
publicStringname;
/**這是main方法,是程序的入口
*@paramargs用戶輸入參數
*/
publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");
f1();
}
/**這是第1個方法,其作用是...*/
publicstaticvoidf1(){
System.out.println("f1()!");
}
}</span>
<spanstyle="font-size:18px;">importjava.io.IOException;
/**javadoc注釋內容
*@since1.0
*@version1.1
*@authorBlueJey
*<br>鏈接到另一個文檔{@linkHello},就這些
*seeHello
*/
publicclassHelloWorld{
/**非public,protected屬性上的注釋不生成*/
publicStringname;
/**這是main方法,是程序的入口
*@paramargs用戶輸入的參數,是數組
*@throwsIOExceptionmain方法io異常
*/
publicstaticvoidmain(Stringargs[])throwsIOException{
System.out.println("helloWorld!");
f1();
f2(1);
}
/**這是第一個方法,其作用是....
*@deprecated從版本1.2開始,不再建議使用此方法
*/
publicstaticvoidf1(){
System.out.println("fl()!");
}
/**這是第二個方法,其作用是....
*@return返回是否OK
*@parami輸入參數i
*@seeHello
*@throwsIOExceptionio異常
*/
publicstaticStringf2(inti)throwsIOException{
System.out.println("f1()!");
return"OK";
}
}</span>
[java]view plain
注意:
如果源文件中有用到@version,@author標記,則在執行javadoc命令時,要加-version-author
javadoc-version-author-ddoc*.java
(其中用-version用於提取源文件中的版本信息-author用於提取源文件中的作者信息)
『貳』 用java正則表達式提取java程序中的注釋
正則的效率非常低,有很多不用正則的好方法:
一,示例 某java程序
比如說一個Test2.java,將其保存在C盤根目錄下,代碼內容如下
/**
* @author xxx
*
*/
public class Test2 {
/* main method */
public static void main(String[] args) {
//a
int a =5;
//b
int b =5;
//a+b
System.out.println(a+b);
}
}
二,提取注釋程序,將所有注釋放到一個List裡面,最後列印輸出:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test {
private static final String javaFilePath = "C:/Test2.java";
public static void main(String[] args) throws IOException {
List<String> comments = new ArrayList<String>();
BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream(javaFilePath)));
String line=null;
while((line=bfr.readLine())!=null){
line = line.trim();
if(line.startsWith("//")){
comments.add(line);
}
else if(line.startsWith("/*")&&line.endsWith("*/")){
comments.add(line);
}else if(line.startsWith("/*")&&!line.endsWith("*/")){
StringBuffer multilineComment = new StringBuffer(line);
while((line=bfr.readLine())!=null){
line = line.trim();
multilineComment.append("\n").append(line);
if(line.endsWith("*/")){
comments.add(multilineComment.toString());
break;
}
}
}
}
bfr.close();
for(int i=0;i<comments.size();i++){
System.out.println("第"+(i+1)+"處注釋: ");
System.out.println(comments.get(i));
}
}
}
三,輸出結果:
第1處注釋:
/**
* @author xxx
*
*/
第2處注釋:
/* main method */
第3處注釋:
//a
第4處注釋:
//b
第5處注釋:
//a+b
『叄』 java獲取當前類上的註解內容
@Retention(RetentionPolicy.RUNTIME) // 註解會在class位元組碼文件中存在,在運行時可以通過反射獲取到
@Target({ElementType.FIELD,ElementType.METHOD})//定義註解的作用目標**作用范圍欄位、枚舉的常量/方法
@Documented//說明該註解將被包含在javadoc中
public @interface FieldMeta {
/**
* 是否為序列號
* @return
*/
boolean id() default false;
/**
* 欄位名稱
* @return
*/
String name() default "";
/**
* 是否可編輯
* @return
*/
boolean editable() default true;
/**