java中的内置注解Annotation

转载 2012年03月26日 20:26:19

背景知识:
       从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范。注释是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。注释可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class文件等产生任何影响,也不会对它们的执行产生任何影响。
     元数据的作用,大致可分为三种:编写文档,通过代码里标识的元数据生成文档;代码分析,通过代码里标识的元数据对代码进行分析;编译检查,通过代码里标识的元数据让编译器能实现基本的编译检查。

JDK5内置的基本注释
    JDK5内置了一些常用的注释,可以在编译时帮我们捕获部分编译错误,及提示信息,下面介绍下这些注释的用法:

1、@Override定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。例如我们为某类重写toString()方法却写成了tostring(),并且我们为该方法添加了@Override注释;代码如下:

public class OverrideDemo {
    @Override
    public String tostring() {
        return super.toString();
    }
}

 

在编译时,会提示以下错误信息:

OverrideTest.java:4: 方法未覆盖其父类的方法 
          @Override
         ^1 错误
 
 
 
2、@Deprecated定义在java.lang.Deprecated中,此注释可用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。使用@Deprecated的示例代码如下:
public class DeprecatedDemo {
    public static void main(String[] args) {
         DeprecatedClass.DeprecatedMethod();
    }
}
class DeprecatedClass {
    @Deprecated
    public static void DeprecatedMethod() {
    }
}
 
在编译时,会得到以下提示信息:

注意:DeprecatedDemo.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。

要注意@Deprecated与@deprecated的区别,@deprecated是为了生成文档的需要,例如:
class DeprecatedClass {

@Deprecated
    public static void DeprecatedMethod() {
    }
}
 
 

 
3、@SuppressWarnings定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好了的,我们选择性的使用就好了,参数如下:


通过上面的表格,你应该了解到每个参数的用意了,下面我就以一个常用的参数unchecked为例,为你展示如何使用@SuppressWarnings注释,示例代码如下:

import java.util.List;
import java.util.ArrayList;
public class SuppressWarningsDemo {
        public static List cache = new ArrayList();
        //@SuppressWarnings(value = "unchecked")
        public void add(String data) {
            cache.add(data);
        }
}

 

当我们不使用@SuppressWarnings注释时,编译器就会有如下提示:

引用
注意:SuppressWarningsDemo.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。

 

另外,由于@SuppressWarnings注释只有一个参数,并且参数名为value,所以我们可以将上面一句注释简写为
@SuppressWarnings("unchecked")。


同时参数value可以取多个值如:
@SuppressWarnings(value={"unchecked", "deprecation"})
或@SuppressWarnings({"unchecked", "deprecation"})。


原帖地址:http://www.iteye.com/topic/165316

Java注解(Annotation)详解(一)——概述及JDK自带注解

(一)注解的概述 最近在学习Java注解,看了慕课网的视视频后觉得不错,但我相信一段时间后肯定会忘记,所以做做笔记。 1.何为注解?   概念:注解(Annotation),也叫元数据。一种代码级...
  • Zen99T
  • Zen99T
  • 2015年10月30日 09:54
  • 6185

Java Annotation注解继承方式说明

有关Annotation的继承说明: 1、JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的...
  • zxmsdyz
  • zxmsdyz
  • 2015年03月22日 22:32
  • 2120

Java Annotation详解+自定义java注解(一)

java annotation的详解,元注解的详解 注解的注解: 我们可以通过元注解来实现一个自定义的HelloWorld注解...
  • emilyRR
  • emilyRR
  • 2015年08月07日 21:52
  • 1393

Java Annotation及注解原理简析

参考资料:http://www.trinea.cn/android/java-annotation-android-open-source-analysis/                     ...
  • u012227846
  • u012227846
  • 2015年01月15日 10:41
  • 3878

深入理解Java:注解(Annotation)自定义注解入门

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处...
  • changsimeng
  • changsimeng
  • 2017年03月22日 10:35
  • 715

简单自定义Annotation和利用反射获取注解中的值

用一个简单例子 自定义注解: import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;...
  • zxdfc
  • zxdfc
  • 2015年10月20日 00:33
  • 2938

spring中自定义注解(annotation)与AOP中获取注解

spring中自定义注解(annotation)与AOP中获取注解 标签: annotation aop sprin 2015-04-15 16:51 25410人阅读 评论(1) 举...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年12月12日 17:06
  • 2765

深入理解Java:自定义注解入门(Annotation)

Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:...
  • zhuyuehui99
  • zhuyuehui99
  • 2017年02月25日 10:19
  • 521

java动态代理对象实现日志的拦截(annotation自定义注解方式)

java动态代理对象,实现日志的输出,另外自定义annotation,实现注解类动态对象日志的拦截。...
  • kevon_sun
  • kevon_sun
  • 2016年04月02日 22:50
  • 2654

Java中实现自定义的注解处理器(Annotation Processor)

在之前的《简单实现ButterKnife的注解功能》中,使用了运行时的注解实现了通过编写注解绑定View与xml。由于运行时注解需要在Activity初始化中进行绑定操作,调用了大量反射相关代码,在界...
  • ucxiii
  • ucxiii
  • 2016年07月25日 19:42
  • 7191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的内置注解Annotation
举报原因:
原因补充:

(最多只允许输入30个字)