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;
/**