注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记。

以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。

标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

一个注解相当于一个类。

看java.lang包,可看到JDK中提供的最基本的annotation。

@SuppressWarning(”deprecation”)--->压制警告

SupressWarning是告知编译器或开发工具等提示指定的编译器警告;

“deprecation”是告知具体的信息即方法已过时。

@Deprecated(过时的方法,对于不再使用的方法,可能别人或别的地方有调用这个方法,不能删除完事)

直接在刚才的类中增加一个方法,并加上@Deprecated标注,在另外一个类中调用这个方法。测试一下。

@SuppressWarnings("deprecation") (用这个可以告诉 程序说,我知道调用的方法过时了)

@Override--->提示覆盖(父类方法)

public boolean equals(Reflect other)方法与HashSet结合讲解

像person类,覆盖父类的equals 和hashCode方法,人家接收的参数是Object,人们习惯总是传入自己的对象,造成覆盖失败,变成重载!

注解的应用结构图

演示和讲解@Target元注解

Target(告诉编译器,自定义的注解类可以用在方法还是类....),设置Target等于ElementType.METHOD,原来加在类上的注解就报错了,改为用数组方式设置{ElementType.METHOD,ElementType.TYPE}就可以了。

元注解以及其枚举属性值不用记,只要会看jdk提供那几个基本注解的API帮助文档的定义或其源代码,按图索骥即可查到,或者直接看java.lang.annotation包下面的类。

(自定义注解)示例代码:

@Retention(RetentionPolicy.RUNTIME)//告诉程序说,这个注解要保存到运行时期

@Target({ElementType.METHOD,ElementType.TYPE})//告诉编译器,这个注解可以用在方法上,也可以用在类上

public @interface MyAnnotation {

String color() default "yellow";//默认缺省值为yellow

String value() ;//不指定

int [] arrayAttr() default {1,2};//默认为{1,2}

EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;//枚举类

MetaAnnotation annotationAttr() default @MetaAnnotation("xxx");//属性中加注解,用@。可以在对别的类加注解时,改变值

}

为注解增加基本属性

(可以是八种基本数据类型,String ,数组,枚举,注解,Class

什么是注解的属性?

一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则,就不是。如果还想区分出是传智播客哪个班的学生,这时候可以为胸牌在增加一个属性来进行区分。加了属性的标记效果为:@MyAnnotation(color="red")

定义基本类型的属性和应用属性:

在注解类中增加String color();

@MyAnnotation(color="red")

用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法

MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

System.out.println(a.color());

可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象

如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")。

枚举和注解都是特殊的类,不能用new 创建它们的实例对象,创建枚举的实例对象就是在其中增加元素。

在程序中如何创建出一个注解的实例对象啊?直接用@放上一个标记即可

Eg:package july78javaEnhance;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)//元注解:信息的信息就是元信息 RUNTIME,保留到运行期间

/**

* 指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,

* 则保留策略默认为 RetentionPolicy.CLASS。

*/

//@Target(ElementType.METHOD)如果加上这句的话(只能作用于方法),那边就会报错!

public @interface AnnotationDemo12 {//注解

String color() default "blue";//相当于构造方法一样,如果给了它默认的初值,可以不用再设置(有默认的)

String value();

int []age();//数组和枚举类型的注解

//还有注解类型的注解,暂时没学会

MetaAnnotation annotation();

//上面的MetaAnnotation是自己定义的一个注解类型,这样的话对于应用了当前注解的AnnotationDemo11类,就必须写上注解类型的属性

}

package july78javaEnhance;

import java.util.Arrays;

//备注:应用注解后,它的属性你你没有写上,它会给予提醒!missing attribution

@AnnotationDemo12(color = "red",value = "j2ee",age = {1,2,3}, annotation = @MetaAnnotation(sex = "男"))//注解加注解

public class AnnotationDemo11 {

@SuppressWarnings("deprecation")//压缩注解,一个注解就是一个类,用到的一个注解就相当于是调用的实例对象

@AnnotationDemo12(value = "jase",age = {1,2,3}, annotation = @MetaAnnotation(sex = "女"))//备注:如果别的属性有默认值,只有一个属性需要你设置,那么你就不需要写上全部的

//赋值表达式,如上直接写上"jase"就行

public static void main(String[] args) {

System.runFinalizersOnExit(true);//表示已经过时的方法,开发工具会给它中间加上一天横线

/**

*  boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。

*/

if(AnnotationDemo11.class.isAnnotationPresent(AnnotationDemo12.class)){

AnnotationDemo12 annocation = (AnnotationDemo12)AnnotationDemo11.class

.getAnnotation(AnnotationDemo12.class);//证明这里面有你的注解

System.out.println(annocation.color());//调用属性

System.out.println(Arrays.toString(annocation.age()));//将数组打印出来

System.out.println(annocation.annotation().sex());//相当于调用属性的属性

}

}

}

java 注解(Annotation)的更多相关文章

  1. Java - 注解 (Annotation)

    Java - 注解 (Annotation)   一.基本的 Annotation     > 使用 Annotation 时要在其前面增加 @符号,并把该 Annotation 当成一个修饰符 ...

  2. Java注解Annotation(一)

    Java注解Annotation(一)——简介 这一章首先简单介绍一下注解,下一章会给出一个注解应用的DEMO. 1. 元注解 元注解的作用是负责注解其他的注解. JDK1.5中,定义了4个标准的me ...

  3. Java注解(Annotation)详解

    转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...

  4. Java注解Annotation与自定义注解详解

    Java注解简介 开发中经常使用到注解,在项目中也偶尔会见到过自定义注解,今天就来探讨一下这个注解是什么鬼,以及注解的应用场景和如何自定义注解. 下面列举开发中常见的注解 @Override:用于标识 ...

  5. 深入JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  6. 深入学习JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  7. java注解(Annotation)解析

    注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...

  8. Java注解Annotation学习

    学习注解Annotation的原理,这篇讲的不错:http://blog.csdn.net/lylwo317/article/details/52163304 先自定义一个运行时注解 @Target( ...

  9. java注解Annotation

    扯扯注解的蛋 为什么学习注解?学习注解有什么好处?学完能做什么? 1.能够读懂别人的代码,特别是框架相关的代码 2.让编程更加简洁,代码更加清晰 3.让别人高看你一眼 注解是java1.5引入的 概念 ...

  10. java 注解Annotation

    什么是注解?  注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的. java注解又叫java标注,java提供了一套机制,使得我们可以对 ...

随机推荐

  1. 想要快速完成一个Python项目,离不开这些开源库

    链接:https://opensource.com/article/18/9/python-libraries-side-projects 在Python / Django世界中有一句话:我们为语言而 ...

  2. 【JZOJ4786】【NOIP2016提高A组模拟9.17】小a的强迫症

    题目描述 输入 输出 样例输入 3 2 2 1 样例输出 3 数据范围 样例解释 解法 先假定每种颜色的珠子取一个按顺序排列. 设这n个珠子就是每一种颜色的珠子的最后一个. 考虑逐个把珠子放入. 对于 ...

  3. nodeJs学习-18 mysql数据库了解

    智能社视频24/25 四大操作语句: 1.删 DELETE DELETE FROM 表 WHERE 条件 2.增 INSERT INSERT INTO 表(字段列表) VALUES(值列表) 3.改 ...

  4. SDUT-2140_判断给定图是否存在合法拓扑序列

    数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...

  5. Same Tree 深度优先

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  6. 【NS2】trace 文件格式(转载)

    本文档是对 http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats > 的翻译. 译注:本文描述的无线格Trace格式已经有些陈旧,现在一 ...

  7. IO流之字符流-1

    Reader和Writer抽象类 Reader是定义java的流式字符输入流模式的抽象类 Writer是定义流式字符输出的抽象类 该类的方法都返回void值并在错条件下抛出IOException异常 ...

  8. Code Force 429B Working out【递推dp】

    Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...

  9. ios程序员6级考试(答案和解释)

    http://blog.sunnyxx.com/2014/03/06/ios_exam_0_key/ 我是前言 上次发了个ios程序员6级考试题 ,还在不断补充中,开个帖子配套写答案和解释. 1. 下 ...

  10. gcc需找头文件路径

    `gcc -print-prog-name=cc1plus` -v This command asks gcc which C++ preprocessor it is using, and then ...