注解

注解(元数据):与类,接口,枚举是在同一个层次,可声明在包,类,字段,方 法,局部变量,方法参数等的前面,用来对这些元素进行说明,注释。【1.5之后 新特性】

使用注解:@注解名称

作用分类:

编写文档:通过代码里标识的注解(元数据)生成文档【生成doc(api)文档】

Javadoc  类名.Java------->index.html

代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

编译检查:..............让编译器能够实现基本的编译检查【Override

 

JDK中预定义的一些注解

@Override[覆盖]:检测被该注解标注的方法是否是继承父类(接口)的

@Deprecated[弃用]:该注解标识的内容,已过时

@SuppressWarnings[]:用来压制警告

【一般传递参数all@SuppressWarnings“all”)】

自定义注解

格式:

元注解

Public @interface 注解名称{}

pjava  .类名.class

本质:注解本质是一个接口,该接口默认继承Annotation接口

属性:接口中可以定义的成员方法【抽象方法,public abstract可默认不写】

要求:

属性的返回值类型

基本数据类型

String

枚举

注解

以上类型的数组

  1. 定义了属性,在使用时,使用时给属性赋值
    1. 如果定义属性时,使用default关键字给属性默认初始化值,则使用属性时,不用赋值
    2. 如果只有一个属性需要赋值,且属性名称为value,则value可以省略
    3. 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}省略

元注解:用于描述注解的注解

@Target:描述注解能够作用的位置

TYPE:可以作用于类上

METHOD:可以作用于方法上

FIELD:可以作用于成员变量上

@Retention:描述注解被保留的阶段【源码,classruntime阶段】

@Documented:描述注解是否被抽取到api文档中

@Interited:描述注解是否被子类继承

 

 

【生成doc(api)文档】

 

package edu.xupt.annotation;
/**
* @author 张孛
* @version 1.8
* @deprecated
*/

public class Anno {
/**
* 计算两个int类型数的积
* @param a 整数
* @param b 整数
* @return 两数的乘积
*/

private int multiply(int a,int b){
return a*b;
}
}


【注解使用】
package edu.xupt.annotation;

public @interface Anno1 {
String name() default "张三";
Anno2 myanno();
int[] age();
public abstract Student sss1();
}
package edu.xupt.annotation;
@Anno1(sss1 =Student.ss ,age = {15,22},name = "张三",myanno = @Anno2)
public class Demon {
}



【预定义的注解】
public class Demo1 {
public static void main(String[] args) {
annot annot = new annot("注释");
annot.show(annot.name);
ExecutorService service = Executors.newFixedThreadPool(1);
service.submit(annot);
service.shutdown();
}
}
@SuppressWarnings("all")
class annot implements Runnable{
String name;
@Override
public void run() {
System.out.println("run方法");
}

public annot(String name) {
this.name = name;
}
@Deprecated
public void show(String s){
this.name=s;
System.out.println(name);
}
}

 

posted @ 2019-12-12 23:08  敲呗  阅读(125)  评论(0)    收藏  举报