蔡香满屋
站在牛顿头上吃苹果

注解的作用有:

1.用来充当注释的作用(仅仅是一个文字的说明)  如@Deprecated表示已过期,不再建议使用

2.用来做代码的检测(验证) ,即检测此方法是否是一个重写的如@Override。

3.可以携带一些信息(内容)   比如以往我们可以使用文件.properties.xml注解来携带信息

4.Java中有一写写好的注解供我们直接使用的有:

  a.@Depreacted 用来说明方法是废弃的

  b.@Override

  c.@SuppressWarnings(信息)   该注解实现代码如下:

默认该注解里面接收的参数是Strin[],即如果数组内的元素有多个时,就需要写成@SuppressWarning({"","",""}),如果只有一个元素时,则只需要写成@SuppressWarnings("unused")

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
  String[] value(); // String数组
}

  serial:指明类实现了序列化接口,不添加序列化ID号如:

  @SuppressWarnings("serial")
  public class Annotation implements Serializable{}

5.注解中可以携带信息     可以不携带

  信息不能随意写        信息的类型只能是如下几种类型:

  a.基本数据类型

  b.String类型

  c.枚举类型enum

  d.注解类型@

  e.数组类型[]  数组的内部需要是如上的四种类型

6.自己如何定义一个注解类型?

  a.如何创建自己的一个注解类型,可以使用@interface定义一个新的注解类型

注意:

a.注解的写法跟接口非常相似,我们可以利用接口的特点来记忆注解,

注解里可以描述:公有的静态的常量属性如public static final,不过这种情况很少见,因为我们大多情况下定义注解是为了灵活性,而final修饰的常量不可修改,则不符合。

b.可以描述public abstract的方法,可以通过方法要求返回值返回五种类型。

3.定义了这样之后,这个注解还不能被外部使用,还需要加上元注解(需要利用java提供好的注解来说明)

不能使用的:

public @interface myAnnotation {
String test();
}

能够使用的:

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)

public @interface myAnnotation {
String[] value default "xiao"; // 默认给个初始值,外部引用这个注解时当没有赋值时则默认就是使用这个值,如外部类中有个属性头顶加上:

@MyAnnotatino()

private String name;
}

扩展:元注解有以下几种内容:

1.@Target描述当前的这个注解可以防止在哪里使用如:type(类),FIELD(属性),METHOD(方法),CONSTRUCTOR(构造方法)

2.@Retention 描述当前的这个注解存在什么作用域中的:源代码文件--》编译--》字节码文件--》加载--》内存执行

@Retention(RetentionPolicy.SOURCE)表示只是在源代码阶段,,只是做个解释说明而已,

@Retention(RetentionPolicy.RUNTIME)表示在运行时的作用域,一般用到使用时用到注解

 

posted on 2019-07-06 21:44  蔡香满屋  阅读(1751)  评论(0)    收藏  举报