给编译器看的注释——Annotation
java.lang.annotation,接口Annotation。
Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形式应用于代码:类(class),属性(attribute),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
想在另一个类test中使用上面这个注解MyAnno的时候, 就这么用:
上面只是简单的示范, 下面做个例子——我们自己定义一个注解DbInf, 当我们还没写DbInf类的时候, 当然会报错了,如下:
那么, 注解MyAnno只能作用在类里面的的方法上,不能作用在变量和类上
ElementType.METHOD: 只能作用在方法上
ElementType.FIELD: 只能作用在字段上
ElementType.TYPE: 只能作用在类上(或接口上)
常用以上3个范围,(实际ElementType变量一共有7种范围)
这3个可以同时使用, 如:
我们还可以反射出注解:
java.lang.annotation,接口Annotation。
Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形式应用于代码:类(class),属性(attribute),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
建一个注解的话就新建一个Annotation, 使用注解的时候直接把注解名添加到要测试的方法上方就行了. 例如建一个注解: 新建一个类MyAnno,里面有一个方法,那么MyAnno类就成了一个注解
<span style="font-size:18px;">public @interface MyAnno{
} </span>
想在另一个类test中使用上面这个注解MyAnno的时候, 就这么用:
<span style="font-size:18px;">class test{
@MyAnno
a(){
}
}</span>
上面只是简单的示范, 下面做个例子——我们自己定义一个注解DbInf, 当我们还没写DbInf类的时候, 当然会报错了,如下:
下面我们就来写DbInf类:注解类里面的属性看上去有些诡异——要带括号, 代码如下:
注意: 属性类型只能是基本类型, String, Class, 枚举, 注解,以及以上类型的一维数组, 不能是其他类型例如Date类型
这样上面的ConnectionUtil类就不会报错了.
我们还可以在username里写上default, 默认值是root,
(注:default——默认值)
这样,下面就可以省略username属性了, 如果不写上面的default, 下面也不写username的话, 就会报错;
现在再接着说文章一开头时的MyAnno类, 此时的MyAnno可以添加在任何方法, 变量和类的上方, 因为这时候的MyAnno没有被限制, 如果给它加限制,就不能到处使用了. 比如,这里使用ElementType.METHOD给它限制;
<span style="font-size:18px;">@Target(ElementType.METHOD)
public @interface MyAnno{
}</span>
那么, 注解MyAnno只能作用在类里面的的方法上,不能作用在变量和类上
ElementType.METHOD: 只能作用在方法上
ElementType.FIELD: 只能作用在字段上
ElementType.TYPE: 只能作用在类上(或接口上)
常用以上3个范围,(实际ElementType变量一共有7种范围)
这3个可以同时使用, 如:
<span style="font-size:18px;">@Target(ElementType.METHOD, ElementType.FIELD, ElementType.TYPE)
public @interface MyAnno{
}</span>
我们还可以反射出注解:
==========================================================================================
以下截图来自百度知道,关于Annotation反射注解的回答,我看标的简明扼要,就摘了过来。