文档章节

JAVA1.5新特性--注解Annotation

i
 iteryder
发布于 2015/10/17 14:28
字数 2168
阅读 12
收藏 0
点赞 0
评论 0

主键分类:

1.   内键注解(基本注解),定义于java.lang包下。

*限定重写父类的方法@Override

*表示已过时:@Deprecated

*抑制编译器警告:@S uppressWarnings

2.   元注解,定义于java.lang.annotation包下。

*@Retention

*@Target

*@Documented

*@Inherited

3.   自定义注解

*使用@interface自定义注解

 

@Override指定方法重写,强制一个子类重写父类的方法。

只能修饰方法,不能修饰类和成员变量。

错误提示1

        The method getObjectInfo() of type Apple must override or implement a suppertype method

        该方法getObjectInfo()类型的苹果必须重写或实现suppertype方法。

        

@Deprecated用于表示某个程序元素(类、方法、成员变量等)已过时。

文档注释中的@deprecated将在后续版本中改进放弃使用。

        

        

当调用Apple类的getObjectInfo方法时,编译器将会给出警告。

 

@SunppressWarnigs指示被注解表示的程序元素及其子元素取消显示指定的编译器警告。

会一直作用于该成程序元素的所有子元素。

@SuppressWarnings("unchecked")

关键字用途

Deprecation使用了不赞成使用的类或方法时的警告 

unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 

fallthrough 当Switch 程序块直接通往下一种情况而没有 Break 时的警告。 

path 在类路径、源文件路径等中有不存在的路径时的警告。  

Serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。  

finally         任何 finally 子句不能正常完成时的警告。 

Unused有程序元素未被使用

all         关于以上所有情况的警告。 

===============元注解

@Target

1、用于指定被修饰的注解能用于修饰哪些程序元素

2@Target注解类型有唯一的value作为成员变量,value的类型为java.lang.annotation.ElementType类型

                            ElementType.ANNOTATION_TYPE 注解声明

                            ElementType.CONSTRUCTOR     构造方法声明

                            ElementType.FIELD                   成员变量声明

                            ElementType.LOCAL_VARIABLE  局部变量声明

                            ElementType.METHOD                   方法声明

                            ElementType.PACKAGE                 包声明

                            ElementType.PARAMETER       参数声明

                            ElementType.TYPE                         类、接口(包括注解类型)或枚举类声明

@Retention

1、用于指定被修饰的注解可以保留多长时间。描述了被其修饰的注解是否被编译器丢弃或者保存在class文件中,如果保存在class文件中,是否在class文件被加载时被虚拟机所读取。

2、默认情况下,注解被保存在class文件中,但在运行时并不能被反射访问。

3@Retention包含一个java.lang.annotation.RetentionPolicy的枚举类型的value成员变量,使用@Retention时必须为该value成员变量指定值,通过指定@Retentionvalue值,就可以指定被修饰的注解可以保留多长时间。

RetentionPolicy.CLASS   (默认值)  编译器将把注解记录在class文件中,当运行java程序时,java虚拟机不再保留注解。程序无法通过反射获取该注解。


RetentionPolicy.RUNTIME 编译器将把注解记录在class文件中,当允许java程序时,java虚拟机也会保留注解,程序可以通过反射获取该注解。


RetentionPolicy.SOURCE编译器直接丢弃被修饰的注解。

示例:

       指定了@Retention在运行时,可以通过反射访问。

        从这个例子中我们可以看到,@Retention修饰了自己的注解类型定义

        



@Documented

1、用于指定被修饰的注解将被javadoc工具提取成文档,

2、如果定义注解时使用了@Documented修饰,则所有使用该注解的程序元素的API文档中豆浆包含该注解说明;

3、@Documented注解类型中没有成员变量。


                    

示例:

         

        

        @SuppressWarnings的部分API文档举例;图中被红框框起来的白色字体部分即是@SuppressWarnings中包含的@Target@Retention,而之所以在这里显示@Target@Retention,就是因为这两个注解是被@Documented注解所修饰的。        

  

 

@Inherited

1、用于指定被修饰的注解将具有继承性

2、如果某个类使用了定义时被@Inherited修饰的注解,则其子类会自动具有这个注解。

3、被@Inherited注解修饰的注解是被标注过的类的子类所继承。类并不从它所实现的接口继承该类型的注解,方法也不能从它所重载的方法中继承这种注解。

4、当被@Inherited修饰的注解的Retention是RetentionPolicy.RUNTIME时,反射API会增强这种继承性。因为如果我们使用java.lang.reflect去查下一个Inherited类型的注解时,反射将展开代码检查工作:检查类及其父类知道泛型指定的注解被发现,或者到达类继承结构的顶层。

 

===============自定义注解

注解类型与接口的差异:

注解类型使用关键字@interface,这个关键字隐含了一个基本的信息,即继
承了:
java.lang.annotation.Annotation接口。

public @interface Inherited{}

注解类型的方法定义是独特的、受限制的,不同于普通接口中的方法定义,注解类型的方法必须声明为无参数、无异常抛出的。注解类型中的方法即为主角类型的成员变量。

String[] value;

方法名就是成员变量名:value

方法返回值即为成员变量的类型:String[]        

方法的后面可以使用default关键字和一个默认数值来声明成员变量的默认值,而空不能作为默认值。 这与我们在非注解类的接口中定义方法有很大的不同。


注解类型与接口的像是之处:

·         都可以定义接口常量、静态成员类型(如枚举类型定义)。注解类型也可以像接口一样被实现或继承。


注解类型是一种接口,但它又不同于接口,如何自定义注解类型

1、使用@interface关键字;

2、使用注解时类似与public、final这样的修饰符。

3、可用于修饰类、接口、方法、成员变量等程序元素。


使用注解时的规范:

1、把注解放在所有修饰符之前;

2、把注解单独放在一行;


      注解也可以带成员变量:

注解的成员变量在注解类型的定义中以无参数方法的形式来声明,其方法名和返回值分别定义了该成员变量的名字和类型。

示例:(value变量单个值

public @interface AnnotationTest{

//定义一个成员变量value

//注解类型中的成员变量以方法的形式定义

String value();//--变量名为value,类型为String

}

示例:(value变量多个值

 public @interface AnnotationTest{

//定义多个成员变量value

//注解类型中的成员变量以方法的形式定义

String[] value();//--变量名为value,类型为String

}

示例:(多个成员变量

public @interface AnnotationTest{

//定义两个成员变量value

//注解类型中的成员变量以方法的形式定义

String name();//--变量名为value,类型为String

int age();

}

使用定义了成员变量的注解时要为成员变量赋值:

示例:

Public class MyAnnotation{

//使用带成员变量的注解时,需要为成员变量赋值

@AnnotationTest(name="jack",age=20)

Public void getObjectInfo(){

……

}

}

使用default关键字为注解类型的成员变量指定初始值:

示例:

Public @interface AnnotationTest{

//定义两个成员变量name和age

//用default关键字为两个成员变量赋初始值

String name() default "jack";

int age() default 20;

}

如果注解类型的成员变量被指定了初始值,则在使用该注解时不对成员变量赋值也可以:

示例:

Public class MyAnnotation{

//使用带有初始值的成员变量的注解时,可以不为成员变量赋值

@AnnotationTest

Public void getObjectInfo(){
.…..

}

}

===============自定义注解分类

根据注解类型是否包含成员变量,可以注解分为两类:

*标记注解

·         没有定义成员变量的注解类型被称为标记注解,这种注解仅使用自身的存在与否,来为我们提供信息。

示例:

@Override---内建注解

@Document---元注解

*元数据注解

·         包含成员变量的注解,因为他们可以接受更多的元数据,所以被称为元数据注解。

示例:

@SuppressWarnings---内建注解

@Target---元注解

 










© 著作权归作者所有

共有 人打赏支持
i
粉丝 0
博文 1
码字总数 2168
作品 0
海淀
程序员
详解java1.5新添特性------注解

详解java1.5新添特性------注解 在求职面试过程中,被问到是否自己用过java注解以及自己实现过一个注解,当时就懵逼了,what's the f**k! 未来的开发模式都是基于注解的,JPA是基于注解的,S...

banyoukang ⋅ 2016/03/29 ⋅ 0

Java注解教程及自定义注解

Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容。在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解。 Java1.5引入了注解,...

天蚕宝衣 ⋅ 2016/02/29 ⋅ 0

深入理解注解(Annotation)

在现在的开发中,注解越来越多地应用到了开发中,无论是Servlet3.0新特性,还是SSH中的全注解,都给开发带来了极大的便利, 直观. 因此需要对注解有深入的理解. 一. 自定义注解 自定义注解的目...

长平狐 ⋅ 2012/09/03 ⋅ 0

Java 注解深入理解

内容概要 Annotation的概念 Annotation的作用 Annotation的分类 系统内置注解 元注解 自定义注解 解析注解信息 JDK8注解新特性 附:项目源码地址 一、Annotation的概念 Annotation(注解)是插...

GarfieldEr007 ⋅ 01/07 ⋅ 0

java web开发中Filter使用Annotation配置 (转载)

为了在java中得到request和response对象,搜索到了 《如何在Java的普通类中获取Session以及request对象 》这篇日志,当写完Filter后,却忘了如何配置Filter,于是又搜索到 《Java Web开发中F...

hiqj ⋅ 2014/03/20 ⋅ 0

自定义注解Annotation的使用

前言 自JDK1.5以后,推出了注解新特性。注解的推出其实最主要的目的是为了让广大的用户认知EJB3.0,因为EJB2.X广受大多数开发者的诟骂和质疑。为了减少配置、让注解替代配置。有了注解,我们...

boonya ⋅ 2015/04/17 ⋅ 0

hibernate4.0+版本和3.0+版本的区别总结

hibernate4.0+版本和3.0+版本的区别总结 马老师说的好。要穿一手鞋,so,自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别 1.数据库方言设置 <property name=”dialect”>org.hibe...

千江 ⋅ 2013/05/24 ⋅ 1

JDK 1.5 新特性学习笔记(4)

Annotation(注解) Annotation是一种元数据(metadata),即“Information about information”,在源代码中标记。 注解使用类Javadoc的语法,@ANNOTATION_NAME(参数),参数为KEY=VALUE的形式...

丽天 ⋅ 2011/06/27 ⋅ 0

spring 自动扫描 注入

首先了解从spring2.5增加的新特性: 这些新特性包括:注解驱动的依赖性注入(annotation-driven dependency injection),使用注解而非XML元数据来自动侦测classpath上的Spring组件,注解对生...

Java编程思想 ⋅ 2013/11/22 ⋅ 0

Java模块化开发框架--Strato Framework

Strato((音st'rɑ:təʊ)是一个Java Web开发框架,为开发者提供快速、敏捷、可持续维护的Web应用架构基础。 主要特性: 1.基于OSGi可插拔设计,可实现局部快速更新 2.基于注解(Annotation)的...

strato ⋅ 2016/07/05 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部