代码注解生成java java注解源码

Java如何进行单行注释和多行注释?

(1)单行注释:以“ // ”开头后面接所要加的说明的内容。如下面所示: //定义变量a int a = 10; //定义变量b int b = 20;上面的语句中,在编译的过程就会直接略过注释,只会编译 int a = 10 和 int b = 20这两句。由此可见注释只是起着说明的作用。

创新互联建站制作网站网页找三站合一网站制作公司,专注于网页设计,成都做网站、网站建设、外贸营销网站建设,网站设计,企业网站搭建,网站开发,建网站业务,680元做网站,已为上千余家服务,创新互联建站网站建设将一如既往的为我们的客户提供最优质的网站建设、网络营销推广服务!

(2)多行注释:以“/*”开头,以“*/”结尾。 假设当你要说明你所写的代码的功能时。要说明的内容有很多。如果全部放在同一行会显得很难看。所以一般会用多行来写,如下所示// 说明//说明//说明//说明以上是用四个单行注释来注释四行说明。但如果有10行说明就要按十个“//”这显示很麻烦,所以这时就可采用多行注释。上面的可改成:/*说明说明说明说明*/也可以这样/* 说明 说明 说明 说明 */

(3)文档注释:以“/**”开头,以“*/”结尾。文档注释主要是生成文档的。

java中如何自动生成注释

你说的应该是生成javadoc吧?

最简单方式就是使用命令行, cd到你的项目源代码目录下, 输入如下指令:

javadoc -d docs -subpackages com.yourpackage

其中-d docs指定了生成的javadoc在相对目录docs下, -subpackages com.yourpackage指定了你要被生成javadoc的源代码包.

JAVADOC是官方提供的一种生成注释文档的工具, 他的用法如下:

用法: javadoc [options] [packagenames] [sourcefiles] [@files]

-overview file                 从 HTML 文件读取概览文档

-public                          仅显示 public 类和成员

-protected                       显示 protected/public 类和成员 (默认值)

-package                         显示 package/protected/public 类和成员

-private                         显示所有类和成员

-help                            显示命令行选项并退出

-doclet class                  通过替代 doclet 生成输出

-docletpath path               指定查找 doclet 类文件的位置

-sourcepath pathlist           指定查找源文件的位置

-classpath pathlist            指定查找用户类文件的位置

-cp pathlist                   指定查找用户类文件的位置

-exclude pkglist               指定要排除的程序包列表

-subpackages subpkglist        指定要递归加载的子程序包

-breakiterator                   计算带有 BreakIterator 的第一个语句

-bootclasspath pathlist        覆盖由引导类加载器所加载的

类文件的位置

-source release                提供与指定发行版的源兼容性

-extdirs dirlist               覆盖所安装扩展的位置

-verbose                         输出有关 Javadoc 正在执行的操作的信息

-locale name                   要使用的区域设置, 例如 en_US 或 en_US_WIN

-encoding name                 源文件编码名称

-quiet                           不显示状态消息

-Jflag                         直接将 flag 传递到运行时系统

-X                               输出非标准选项的提要

通过标准 doclet 提供:

-d directory                   输出文件的目标目录

-use                             创建类和程序包用法页面

-version                         包含 @version 段

-author                          包含 @author 段

-docfilessubdirs                 递归复制文档文件子目录

-splitindex                      将索引分为每个字母对应一个文件

-windowtitle text              文档的浏览器窗口标题

-doctitle html-code            包含概览页面的标题

-header html-code              包含每个页面的页眉文本

-footer html-code              包含每个页面的页脚文本

-top    html-code              包含每个页面的顶部文本

-bottom html-code              包含每个页面的底部文本

-link url                      创建指向位于 url 的 javadoc 输出的链接

-linkoffline url url2        利用位于 url2 的程序包列表链接至位于 url 的文档

-excludedocfilessubdir name1:.. 排除具有给定名称的所有文档文件子目录。

-group name p1:p2..        在概览页面中, 将指定的程序包分组

-nocomment                       不生成说明和标记, 只生成声明。

-nodeprecated                    不包含 @deprecated 信息

-noqualifier name1:name2:... 输出中不包括指定限定符的列表。

-nosince                         不包含 @since 信息

-notimestamp                     不包含隐藏时间戳

-nodeprecatedlist                不生成已过时的列表

-notree                          不生成类分层结构

-noindex                         不生成索引

-nohelp                          不生成帮助链接

-nonavbar                        不生成导航栏

-serialwarn                      生成有关 @serial 标记的警告

-tag name:locations:header 指定单个参数定制标记

-taglet                          要注册的 Taglet 的全限定名称

-tagletpath                      Taglet 的路径

-charset charset               用于跨平台查看生成的文档的字符集。

-helpfile file                 包含帮助链接所链接到的文件

-linksource                      以 HTML 格式生成源文件

-sourcetab tab length          指定源中每个制表符占据的空格数

-keywords                        使程序包, 类和成员信息附带 HTML 元标记

-stylesheetfile path           用于更改生成文档的样式的文件

-docencoding name              指定输出的字符编码

java注解是怎么实现的

写一个使用该注解的类:

import java.io.IOException;

/**

* Created by Administrator on 2015/1/18.

*/

@TestAnnotation(count = 0x7fffffff)

public class TestMain {

public static void main(String[] args) throws InterruptedException, NoSuchFieldException, IllegalAccessException, IOException {

TestAnnotation annotation = TestMain.class.getAnnotation(TestAnnotation.class);

System.out.println(annotation.count());

System.in.read();

}

}

反编译一下这段代码:

Classfile /e:/workspace/intellij/SpringTest/target/classes/TestMain.class

Last modified 2015-1-20; size 1006 bytes

MD5 checksum a2d5367ea568240f078d5fb1de917550

Compiled from "TestMain.java"

public class TestMain

minor version: 0

major version: 52

flags: ACC_PUBLIC, ACC_SUPER

Constant pool:

#1 = Methodref #10.#34 // java/lang/Object."init":()V

#2 = Class #35 // TestMain

#3 = Class #36 // TestAnnotation

#4 = Methodref #37.#38 // java/lang/Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;

#5 = Fieldref #39.#40 // java/lang/System.out:Ljava/io/PrintStream;

#6 = InterfaceMethodref #3.#41 // TestAnnotation.count:()I

#7 = Methodref #42.#43 // java/io/PrintStream.println:(I)V

#8 = Fieldref #39.#44 // java/lang/System.in:Ljava/io/InputStream;

#9 = Methodref #45.#46 // java/io/InputStream.read:()I

#10 = Class #47 // java/lang/Object

#11 = Utf8 init

#12 = Utf8 ()V

#13 = Utf8 Code

#14 = Utf8 LineNumberTable

#15 = Utf8 LocalVariableTable

#16 = Utf8 this

#17 = Utf8 LTestMain;

#18 = Utf8 main

#19 = Utf8 ([Ljava/lang/String;)V

#20 = Utf8 args

#21 = Utf8 [Ljava/lang/String;

#22 = Utf8 annotation

#23 = Utf8 LTestAnnotation;

#24 = Utf8 Exceptions

#25 = Class #48 // java/lang/InterruptedException

#26 = Class #49 // java/lang/NoSuchFieldException

#27 = Class #50 // java/lang/IllegalAccessException

#28 = Class #51 // java/io/IOException

#29 = Utf8 SourceFile

#30 = Utf8 TestMain.java

#31 = Utf8 RuntimeVisibleAnnotations

#32 = Utf8 count

#33 = Integer 2147483647

#34 = NameAndType #11:#12 // "init":()V

#35 = Utf8 TestMain

#36 = Utf8 TestAnnotation

#37 = Class #52 // java/lang/Class

#38 = NameAndType #53:#54 // getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;

#39 = Class #55 // java/lang/System

#40 = NameAndType #56:#57 // out:Ljava/io/PrintStream;

#41 = NameAndType #32:#58 // count:()I

#42 = Class #59 // java/io/PrintStream

#43 = NameAndType #60:#61 // println:(I)V

#44 = NameAndType #62:#63 // in:Ljava/io/InputStream;

#45 = Class #64 // java/io/InputStream

#46 = NameAndType #65:#58 // read:()I

#47 = Utf8 java/lang/Object

#48 = Utf8 java/lang/InterruptedException

#49 = Utf8 java/lang/NoSuchFieldException

#50 = Utf8 java/lang/IllegalAccessException

#51 = Utf8 java/io/IOException

#52 = Utf8 java/lang/Class

#53 = Utf8 getAnnotation

#54 = Utf8 (Ljava/lang/Class;)Ljava/lang/annotation/Annotation;

#55 = Utf8 java/lang/System

#56 = Utf8 out

#57 = Utf8 Ljava/io/PrintStream;

#58 = Utf8 ()I

#59 = Utf8 java/io/PrintStream

#60 = Utf8 println

#61 = Utf8 (I)V

#62 = Utf8 in

#63 = Utf8 Ljava/io/InputStream;

#64 = Utf8 java/io/InputStream

#65 = Utf8 read

{

public TestMain();

descriptor: ()V

flags: ACC_PUBLIC

Code:

stack=1, locals=1, args_size=1

0: aload_0

1: invokespecial #1 // Method java/lang/Object."init":()V

4: return

LineNumberTable:

line 7: 0

LocalVariableTable:

Start Length Slot Name Signature

0 5 0 this LTestMain;

public static void main(java.lang.String[]) throws java.lang.InterruptedException, java.lang.NoSuchFieldException, java.lang.IllegalAccessException, java.io.IOException;

descriptor: ([Ljava/lang/String;)V

flags: ACC_PUBLIC, ACC_STATIC

Code:

stack=2, locals=2, args_size=1

0: ldc #2 // class TestMain

2: ldc #3 // class TestAnnotation

4: invokevirtual #4 // Method java/lang/Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;

7: checkcast #3 // class TestAnnotation

10: astore_1

11: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;

14: aload_1

15: invokeinterface #6, 1 // InterfaceMethod TestAnnotation.count:()I

20: invokevirtual #7 // Method java/io/PrintStream.println:(I)V

23: getstatic #8 // Field java/lang/System.in:Ljava/io/InputStream;

26: invokevirtual #9 // Method java/io/InputStream.read:()I

29: pop

30: return

LineNumberTable:

line 10: 0

line 11: 11

line 12: 23

line 13: 30

LocalVariableTable:

Start Length Slot Name Signature

0 31 0 args [Ljava/lang/String;

11 20 1 annotation LTestAnnotation;

Exceptions:

throws java.lang.InterruptedException, java.lang.NoSuchFieldException, java.lang.IllegalAccessException, java.io.IOException

}

SourceFile: "TestMain.java"

RuntimeVisibleAnnotations:

0: #23(#32=I#33)

最后一行的代码说明,注解`TestAnnotation`的属性设置是在编译时就确定了的。(对属性的说明在[这里][1])。

然后,运行上面的程序,通过CLHSDB在eden区找到注解实例,

hsdb scanoops 0x00000000e1b80000 0x00000000e3300000 TestAnnotation

0x00000000e1d6c360 com/sun/proxy/$Proxy1

类型`com/sun/proxy/$Proxy1`是jdk动态代理生成对象时的默认类型,其中

`com.sun.proxy`是默认的包名,定义于`ReflectUtil`类的`PROXY_PACKAGE`字段中。代理类名`$PROXY1`

包含两部分,其中前缀`$PROXY`是jdk种默认的代理类类名前缀(参见`java.lang.reflect.Proxy`类的javadoc),

后的1是自增的结果。


本文名称:代码注解生成java java注解源码
文章出自:http://ybzwz.com/article/dosjccd.html