一、Annotation

  Annotation不是程序本身,但它可以对程序进行解释,这一点和注释类似。

  但最大的不同点在于,注解可以被其他程序读取,然后可以对其进行一些有针对性操作。

  这是注解与注释最大的不同之处。

  注解可以使用在package(包),class(类),method(方法),filed(属性)等上面。

二、内置注解

  1.@Override

    指明修饰的方法是被重写的方法,如果被@Override修饰的方法不是被重写的方法,编译器会报错。

    

  2.@Deprecated

    Derprecated英文意思是废除,不赞成的意思。该注释的含义是,不赞同使用该注释修饰的内容。

    使用了@Deprecated修饰的内容编译器会发出一个警告,但只是警告要是实在要用也是可以用的,

    只是不赞成使用,不代表不能使用。

    

 3.@SuppressWarnings

  该注解的作用是抑制警告,例如在程序中有一些不规范的写法会产生警告,但在这些写法并不会影响运行。

  如果此时我们不想看见编译器提示的警告信息,这时就可以通过@SuppressWarnings来抑制警告。

  

  我们可以看到使用@SuppressWarnings时,后面加了个括号,里面写了个all。

  我们看下@SuppressWarnings的定义:

  

  其中有一个value(),注意这个不是方法,它@SuppressWarnings的属性。

  属性类型是字符串数组,每次传递参数的时候就可以(value={“str1”,“str2“,“str3”......})

  使用时就通过这样来使用,@SuppressWarnings(value={"all"}),

  由于@suppressWarnings只有value一个属性,可以直接写成(“all”)。

  这里的all不是随便传入的,对应的参数有其对应的含义。

 参数 说明 
 deprecation   使用了某些不赞成使用的类和方法
 unchecked  未检查的转换
 unused  未使用的变量
 resource  有泛型未指定类型
 all  所有警告

 

例如这里@SuppressWarnings(value = {“unused”,“deprecation”}),这样写就代表压制未使用变量异常和使用了不赞成使用的类和方法异常。

这里只举出一些例子,还有很多参数大家可以在网上查阅。

三、自定义注解

  上面都是使用的内置注解,当然我们也可以自定义注解。

  我首先来看下注解的格式,以@SuppressWarnings为例。

  

  我们可以看到注解开头有两个注解@Target、@Retention这两个注解称为元注解,用于对注解进行注解。

  (还有其他两个元注解此处就不介绍了,想了解可以自行查阅。)

  @Target用于描述注解的使用范围,如果使用注解的范围,不在注解定义的范围中则会报错。

  例如注解定义的范围是TYPE可以用于Class Interface中,如果将其使用在方法前面则会报错。

  要将其使用在方法前需要加上METHOD,由于@Target的值时String[] 类型,故可以添加多个参数(范围)。

  参数及其范围:

  

  

  @Retention表示该注解机制的保留级别,及存在周期。

  取值RetentionPolicy.xxxx

  SOURCE:在源文件中有效,即源文件中保留。

  CLASS:在class文件中有效,即class文件保留。

  RUNTIME:在运行时有效,为RUNTIME时可以被反射机制读取。

  有了上面的预备知识后我们就可以自定义注解了。

  

  我们可以在新建中直接创建一个新的注解。

  

  这个自定义的注解作用范围是TYPE,保存级别是RUNTIME。其中还有一些属性及其默认值。

  注意:注解中属性用xxx()表示,赋值时是注解名(xxx=......).

  这样我们就定义好了一个注解,default是设置的默认值,如果使用注解时没有指定值就使用默认值。

  当然也可以不设置默认值,但是不设置默认值的话,使用注解时必须对其属性赋值,不对其进行赋值的话会报错。

  但如果是设置了默认值,不对其赋值会自动使用默认值不会报错。

  

  使用时我们可以对其重新赋值,也可以不对其赋值让它使用默认值。

  但是如果没有设置默认值,则必须在使用时对注解中属性赋值不然会报错。

  

  单纯的定义注解没有任何意义,必须配合对注解进行处理的程序才有意义。

  详见反射:https://www.cnblogs.com/huang-changfan/p/10055286.html

  

8.1(java学习笔记)注解(Annotation)的更多相关文章

  1. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  2. Java学习之注解Annotation实现原理

    前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...

  3. Java学习笔记--注解和反射

    注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...

  4. Java学习笔记--注解

    注解的使用与实例:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 注解的作用及使用方法:http://wenku.baidu ...

  5. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  10. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

随机推荐

  1. HDU 多校对抗第三场 L Visual Cube

    Problem L. Visual Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java ...

  2. Create a conditional DNS forwarder on our domain.com to Amazon default DNS provider

    Backgroup: I have an AWS Managed Active Directory(domain.com). I created a DHCP options set  to my d ...

  3. PowerDesigner使用教程(转)

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...

  4. jquery中的get和post、ajax有关返回值的问题描述

    一:前言 今天我就要离开公司回学校准备考试,在走之前,我自己做的一个模块测试除了一些小的bug.问题如下 我在往数据库中插入数据,首先要选择一级菜单,接着会更具一级菜单生成一级菜单的子目录,在选择日期 ...

  5. bzoj 2064 DP

    这道题可以抽象成两个数列,将一个数列变换为另一个 数列的代价最小 首先我们可以处理出所有的状态代表,对于每个状态 用二进制来表示,代表的是两个数列中的每一项选还是不选 那么答案最多为n1+n2-2,也 ...

  6. Linux IO 同步/异步 阻塞/非阻塞

    同步IO:导致请求进程阻塞,直到IO操作完成: 是内核通知我们何时进行启动IO操作,而实际的IO操作需要当前进程本身阻塞完成: 包括:阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型 ...

  7. Smith-Waterman算法及其Java实现

    Smith-Waterman算法是1981年Smith和Waterman提出的一种用来寻找并比较具有局部相似性区域的动态规划算法,很多后来的算法都是在该算法的基础上发展的.这是一种两序列局部比对算法, ...

  8. phoronix-test-suite测试云服务器

    centos系统 phoronix-test-suite是目前Linux下比较常用的性能测试软件. 使用phoronix-test-suite条件前提:需要安装php5,需要PHP都DOM扩展 因为是 ...

  9. 在oracle官网上,找到我们所需版本的jdk

    oracle的官网,因为都是英文,而且内容还特别多,经常的找不到历史版本的JDK. 特地,将找历史版本JDK的方法记录下来. 访问:http://www.oracle.com/technetwork/ ...

  10. python 复习 4-1 函数、参数、返回值、递归

    函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...