**
注解
**
我们在一开始写代码的时候,就会在复杂的代码前加上注释,这是为了方便我们阅读。而注解是为了方便计算机阅读,也就是说注解是给电脑看的
**注解也叫元数据,是一种代码级别的说明。**是JDK1.5以后版本引入的一个特性,与类,接口,枚举在同一个层次分明。可以声明在包,类,字段,方法,局部变量,方法参数等的前面。
注解的作用:
1.编译检查:通过代码里标识的注解让编译器进行基本的编译检查
2.代码分析:通过代码里标识的注解对代码进行分析
3.编写文档:通过代码里标识的注解生成文档
下面我们看一些JDK中预定义的代码:
@Deprecated:该注解标注的内容表示已过时
@SuppressWarnings:压制警告
@Override:检测标注的方法是否继承自父类或接口
public class Annotation_practice {
@Deprecated//method2方法是method1方法的升级版,建议使用method2,所以加上注解Deprecated
public void method1()
{
}
@SuppressWarnings("all")//不想看到黄色的警告,这个注解可以压制,加到方法前方法的警告消失,加到类前整个类警告消失
public void method2()
{
int a;
}
@Override
public String toString()
{
return null;
}
}
自定义的注解与元注解
通过反编译我们知道了注解就是一个接口,继承了java.lang.annotation.Annotation
自定义一个注解:
注解的属性就是其中定义的抽象方法
要求:
1.属性的返回值类型
2.定义了属性要给属性赋值(使用的时候)
使用了default关键字默认初始化在使用时可以不赋值,若只有一种属性且名字为value,那么直接写值就可以。
元注解:用于描述注解的注解
@Target:描述注解能够作用的位置
@Retention:描述注解被保留的阶段(对应java程序的三个阶段)
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承
下面是一个自定义的注解,使用了元注解来描述:
@Target(value= {ElementType.TYPE,ElementType.METHOD})//被这个注解描述的注解可以加到类上面与方法上面。TYPE:作用到类上;METHOD:方法上;FIELD:成员变量上
@Retention(RetentionPolicy.RUNTIME)//被这个注解描述的注解可以保留到Class文件,并且被JVM读取到
@Documented//被这个注解描述的注解可以被抽取到javadoc文档中
@Inherited//被这个注解描述的注解,如果加到了一个父类上面,那么它的子类就算不写这个注解也会隐式的继承这个注解
public @interface MyAnno {
int show01();
String show02() default "xxx";
Person show03();//返回值是一个枚举类型(Person是一个自定义的枚举类)
MyAnno2 show04();//返回值是一个注解类型
String[] show05();
}
现在我们来使用一下我们定义的注解
@MyAnno(show01 = 0,show03 = Person.P1, show04 = @MyAnno2, show05 = { "" })
public void test()
{
}
因为抽象方法show02有默认值(xxx),所以可以不赋值,其他没有默认值的属性要依次赋值。
这次就更新到这里,下次写两个简单的框架联系一下注解的使用