java中注解的使用
定义:
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。使用注解:@注解名称
作用分类:
①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
例如:
package annotation;
/**
* 注解演示
* @author hide_on_rookies
*@version 1.0
*@since1.5
*/
public class AnnoDemo1 {
/**
* 计算两数的和
*@param a 整数
*@param b 整数
*@return 两数的和
*/
public int add(int a,int b) {
return a+b;
}
}
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
JDK中预定义的一些注解
@override:检查被该注解标注的方法是否是继承自父类(接口)的
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告
例如:
package annotation;
/**
* JDK中预定义的一些注解
@override:检查被该注解标注的方法是否是继承自父类(接口)的
(如果想重写父类的方法,比如toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性。)
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告(一般传递参数all)
*
*/
public class AnnoDemo2 {
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
@Deprecated
public void show() {
//假若此方法有缺陷
//声明不建议使用此方法,声明后show方法上会有横线
}
@SuppressWarnings("all")
public void show2() {
//用于替代show()方法
}
}
自定义注解
格式:
元注解
public @interface 注解名称{
属性列表
}
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
*public interface MyAnno extends java.lang.annotation.Annotation{}
package annotation;
public @interface MyAnno {
}
属性:接口中的抽象方法
要求:
1.属性的返回值类型有下列类型(其他的会报错)
*基本数据类型
*String
*枚举
*注解
*以上类型的数组
使用示例
package annotation;
public @interface MyAnno {
}
package annotation;
public @interface MyAnno2 {
}
package annotation;
public @interface MyAnno {
int show1();
String show2();
Person per();
MyAnno2 anno2();
String[] strs();
}
2.定义了属性,在使用时需要给属性赋值。
1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
3.数组赋值时,值使用{}包裹,如果数组中只有一个值,则{}可以省略
实例
package annotation;
public @interface MyAnno {
int show1();
String show2();
//String show2();default "张三";如果不想在之后赋值,可以使用default设置默认值
Person per();
MyAnno2 anno2();
String[] strs();
}
package annotation;
@MyAnno(show1=0000,show2="多个变量用逗号隔开",per=Person.P1,anno2=@MyAnno2,strs= {"adc,opc"})
public class test {
}
在程序中使用注解
拓展资料:
@ param标签可以归档方法或构造器的某个单一参数,或者归档类、接口以及泛型方法的类型参数。在使用@ param标签时,我们应该针对方法的每一个参数都使用一个该标签。每个段落的第一个词会被当作参数名,而余下的部分则会被当作是对它的描述:
1 |
|
当归档类型参数时,我们应该在类型参数名两边加上<和>:
1 |
|
然而,类型参数通常并不需要显式的文档,因为它们的意义都很明显。
@ see
@ see标签可以创建链接到其他javadoc文档的交叉引用。我们可以在该标签的后面命名任何标识符,尽管我们必须对它们进行充分的限定。例如,通常可以使用某个类的成员的简单名来命名它,但是如果该成员是一个重载方法,我们就必须通过列举各个参数的类型来指定该方法的重载版本。我们可以使用未限定的名字来指定当前包内的接口或类,但必须使用完全限定名来指定其他包中的类型。我们可以通过在成员名的前面使用#来指定类型的成员。下面是所有有效的@ see标签格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
第一种形式所指的是名为getName的方法,该方法与文档注释自身位于同一个类或接口中,或者位于某个包围类或包围接口中,这样的语法也可以应用于构造器和字段。第二种形式引用的是当前包中的类或某个导人包中的类。第三种形式使用完全限定名引用了某个类。
后4种形式的@see引用的是成员,其中,前两个是关于域(DECK-SIZ日和方法(getName)的形式。我们可以直接使用方法名,因为在Attr类中只定义了一个getName方法。后两种形式引用的是Attr类的构造器,其中一个构造器接受的是字符串引元,而另一个构造器接受的则是字符串和对象。当构造器或方法有重载版本时,我们必须指定想要引用的重载版本的引元。
接下来的@see形式将读者引向了一个特定的包:com.magic.attro
最后的两种形式使得我们可以引用其他的文档。其中,前一个使用了来定义链接,后一个使用引号将文档名括了起来。我们可以用这两种形式将读者引向其他文档,例如完整的说明书。
对语言实体进行命名的@ see形式(除上面的最后两种形式之外的所有形式)可以在实体的后面跟随一个标号(label)。在生成的文档中,这种标号的名字将会替代实体的名字。例如:
1 |
|
将创建一个指向getName的文档的链接,但它所显示的文本是”Attribute Names”而不是"getName"。通常我们应该使用成员的真实名字,但这里所展示的特性偶尔也会很有用。