- 浏览: 217149 次
- 性别:
- 来自: 魔都
文章分类
最新评论
-
tsinglongwu:
顶,解决了获取Date单元格的内容问题,原来要转换成DateC ...
【转】JXL获取Excel单元格的日期(DateCell.getDate)与实际填写日期相差8小时的解决方法 -
alexyao8:
威武,今天刚遇到这个问题
【转】JXL获取Excel单元格的日期(DateCell.getDate)与实际填写日期相差8小时的解决方法 -
freeren:
...
利用JAVA Bean 反射得到set,get方法 -
pandengzhegt:
我也敬礼!
《Java Annotation 高级应用》 -
yingzhor:
好文! 敬礼!
《Java Annotation 高级应用》
为了是大家初步了解什么是注解(Annotation),我们先来看如下代码:
相关代码一:
上述代码在eclipse编辑器中会出现警告,内容为"The method toLocaleString() from the type Date is deprecated",它的意思是说toLocaleString()方法是个过时的方法;
为了更好的理解它的含义,我们在cmd窗口来编译它,如下
那么我们可以怎么把这个警告给去掉呢,这是就要使用到注解,我们在main方法之前加上这样一句"@SuppressWarnings("deprecation")",也可以用快捷方式加上,那么警告就会消失。
代码就变成了这样:
注意:每个注解就是一个类,我们在用注解时,就相当于创建了一个注解类的实例;
2.在写程序中,我们可能不希望某个方法之后不被再次调用,那么我们就可以把这个方法定义为过时的方法,过时的方法在调用时,会在方法名上打上删除线,告诉程序员该方法为过时方法,最后不要再用了。下面我们写一个自定义的过时方法:
相关代码二:
注意:只需要在方法前加上:@Deprecated,那么该方法就会被eclipse编辑器打上删除线,来表明为过时方法.
3.JDK为我们提供了如下3中基本的注解Annotation:
.Deprecated:用@Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
.Override:用@Override表示一个方法声明打算重写超类中的另一个方法声明。
.SuppressWarnings:@SuppressWarnings("deprecation")指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
4.注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,java编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。它位于java.lang.annotation中。
5.通常应用注解有如下三个步骤:
1).定义注解类,格式为:
2).应用注解类,如:
3).对应用注解类的类进行反射操作(的类),如:
6.下面我们来完成上述三步操作:
1).切换到java透视图上,点击新建一个注解:
代码如:
2).创建一个类应用该注解:
3.对应用注解类的类进行反射操作:
注:这是程序运行没有输出,明明有注解,怎么会没输出呢?这时我们在MyAnnotation注解类前面加上:@Retention(RetentionPolicy.RUNTIME),再次运行时,就会输出"MyAnnotation"
7.下面我们来解释下什么叫Retention,Retention本身也是一个注解,叫元注解,它后面跟一个值,这个值表示该注解保留到代码的那个阶段;
@Retention元注解,有三种取值,即有三种生命周期:
RetentionPolicy.SOURCE:对应java源文件(如:@override、@superwarnings)
RetentionPolicy.CLASS:对应class文件
RetentionPolicy.RUNTIME:对应内存中的字节码(如:@Deprecated)
默然值就是RetentionPolicy.CLASS,在注解类上加的注解叫“元注解”,class文件本身不是字节码,只有class文件被类加载器被加载到内存中进行校检处理之后,才是二进制的字节码,他们的生命周期不是不同的。
注:如果我们把6中的RetentionPolicy.RUNTIME,改成其他两个中任何一个得话,也是无输出的,因外其他两个的注解生命周期不是运行期,即在内存中无法找到。
8.如果我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),那么AnnotationTest类前面就会有错误提示:"The annotation @MyAnnotation is disallowed for this location",即@MyAnnotation不能放在这个位置,为什么呢?因为刚才我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),它表示该注解只能用在方法上面,如果要想让该注解用的类上面,就可以不刚才那句修改成"@Target({ElementType.METHOD,ElementType.TYPE})",ElementType.TYPE它表示该注解可以应用的类,接口,枚举等类型上。
9.注解的高级应用-为注解增加属性,我们在刚才的MyAnnotation注解类增加一个属性,代码如下:
代码:
那么此时,我们就会发现,AnnotationTest类的上面有错误提示“The annotation @MyAnnotation must define the attribute color”,即必定义color的属性,我们此时就可以把类上面的注解修改成:@MyAnnotation(color="red"),OK了!说明注解类有属性时,在我们调用时就必须提供属性值,除非注解类中的属性有默认值,
代码:
调用的时候就可以直接:@MyAnnotation或@MyAnnotation();
再如代码:
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion")或@MyAnnotation(style="fashion");有默认值的时候,默认值可以省略。
但是通常我们有如下用法:
@SuppressWarnings("deprecation"),它怎么只提供属性值,而没有属性名呢?这就是value()属性的特殊用法,它可以放回任意类型;
再如代码:
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion",value="hello")
或@MyAnnotation("hello");
10.为注解增加高级属性,如数组,枚举,注解,具体就不再举例了,可以参考java语言规范中的实例。
相关代码一:
public class AnnotationTest { public static void main(String[] args) { Date nowDate = new Date(); String strDate = nowDate.toLocaleString(); System.out.println(strDate);// 2009-12-27 16:44:09 } }
上述代码在eclipse编辑器中会出现警告,内容为"The method toLocaleString() from the type Date is deprecated",它的意思是说toLocaleString()方法是个过时的方法;
为了更好的理解它的含义,我们在cmd窗口来编译它,如下
那么我们可以怎么把这个警告给去掉呢,这是就要使用到注解,我们在main方法之前加上这样一句"@SuppressWarnings("deprecation")",也可以用快捷方式加上,那么警告就会消失。
代码就变成了这样:
public class AnnotationTest { @SuppressWarnings("deprecation") public static void main(String[] args) { Date nowDate = new Date(); String strDate = nowDate.toLocaleString(); System.out.println(strDate);// 2009-12-27 16:44:09 } }
注意:每个注解就是一个类,我们在用注解时,就相当于创建了一个注解类的实例;
2.在写程序中,我们可能不希望某个方法之后不被再次调用,那么我们就可以把这个方法定义为过时的方法,过时的方法在调用时,会在方法名上打上删除线,告诉程序员该方法为过时方法,最后不要再用了。下面我们写一个自定义的过时方法:
相关代码二:
public class AnnotationTest { @Deprecated private static void sayHello() { System.out.println("Hello word !"); } public static void main(String[] args) { AnnotationTest.sayHello(); } }
注意:只需要在方法前加上:@Deprecated,那么该方法就会被eclipse编辑器打上删除线,来表明为过时方法.
3.JDK为我们提供了如下3中基本的注解Annotation:
.Deprecated:用@Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
.Override:用@Override表示一个方法声明打算重写超类中的另一个方法声明。
.SuppressWarnings:@SuppressWarnings("deprecation")指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
4.注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,java编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。它位于java.lang.annotation中。
5.通常应用注解有如下三个步骤:
1).定义注解类,格式为:
public @interface A{ }
2).应用注解类,如:
@A class B{ }
3).对应用注解类的类进行反射操作(的类),如:
B.class.isAnnotationPresent(A.class); A a = B.class.isAnnotationPresent(A.class);
6.下面我们来完成上述三步操作:
1).切换到java透视图上,点击新建一个注解:
代码如:
public @interface MyAnnotation { }
2).创建一个类应用该注解:
@MyAnnotation public class AnnotationTest { public static void main(String[] args) { } }
3.对应用注解类的类进行反射操作:
public static void main(String[] args) { if (AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) { MyAnnotation myAnnotation = AnnotationTest.class.getAnnotation(MyAnnotation.class); System.out.println(myAnnotation); } }
注:这是程序运行没有输出,明明有注解,怎么会没输出呢?这时我们在MyAnnotation注解类前面加上:@Retention(RetentionPolicy.RUNTIME),再次运行时,就会输出"MyAnnotation"
7.下面我们来解释下什么叫Retention,Retention本身也是一个注解,叫元注解,它后面跟一个值,这个值表示该注解保留到代码的那个阶段;
@Retention元注解,有三种取值,即有三种生命周期:
RetentionPolicy.SOURCE:对应java源文件(如:@override、@superwarnings)
RetentionPolicy.CLASS:对应class文件
RetentionPolicy.RUNTIME:对应内存中的字节码(如:@Deprecated)
默然值就是RetentionPolicy.CLASS,在注解类上加的注解叫“元注解”,class文件本身不是字节码,只有class文件被类加载器被加载到内存中进行校检处理之后,才是二进制的字节码,他们的生命周期不是不同的。
注:如果我们把6中的RetentionPolicy.RUNTIME,改成其他两个中任何一个得话,也是无输出的,因外其他两个的注解生命周期不是运行期,即在内存中无法找到。
8.如果我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),那么AnnotationTest类前面就会有错误提示:"The annotation @MyAnnotation is disallowed for this location",即@MyAnnotation不能放在这个位置,为什么呢?因为刚才我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),它表示该注解只能用在方法上面,如果要想让该注解用的类上面,就可以不刚才那句修改成"@Target({ElementType.METHOD,ElementType.TYPE})",ElementType.TYPE它表示该注解可以应用的类,接口,枚举等类型上。
9.注解的高级应用-为注解增加属性,我们在刚才的MyAnnotation注解类增加一个属性,代码如下:
代码:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface MyAnnotation { String color(); }
那么此时,我们就会发现,AnnotationTest类的上面有错误提示“The annotation @MyAnnotation must define the attribute color”,即必定义color的属性,我们此时就可以把类上面的注解修改成:@MyAnnotation(color="red"),OK了!说明注解类有属性时,在我们调用时就必须提供属性值,除非注解类中的属性有默认值,
代码:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface MyAnnotation { String color() default "yellow"; }
调用的时候就可以直接:@MyAnnotation或@MyAnnotation();
再如代码:
public @interface MyAnnotation { String color() default "yellow"; String style(); }
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion")或@MyAnnotation(style="fashion");有默认值的时候,默认值可以省略。
但是通常我们有如下用法:
@SuppressWarnings("deprecation"),它怎么只提供属性值,而没有属性名呢?这就是value()属性的特殊用法,它可以放回任意类型;
再如代码:
public @interface MyAnnotation { String color() default "yellow"; String style() default "fashion"; String value(); }
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion",value="hello")
或@MyAnnotation("hello");
10.为注解增加高级属性,如数组,枚举,注解,具体就不再举例了,可以参考java语言规范中的实例。
发表评论
-
applet访问打印机安全警告的解决方法
2013-03-20 15:28 1778这样的警告框,选择了“始縂允许applet访问打印机”在下 ... -
关于动态代理
2012-06-11 10:55 2292JDK动态代理 引用JDK 1.3以后,Java提供了动态代 ... -
HttpClient 实现快盘签到
2012-04-20 09:29 2495引用模拟POST提交实现快盘签到 import j ... -
HttpClient 入门
2012-04-10 15:45 1507一般的情况下我们都是使用IE或者Navigator浏览器来访问 ... -
【转】HttpClient4 简单使用
2012-04-10 15:37 1463需要导入的jar包 package main; im ... -
【转】android httpclient 上传文件
2012-04-10 15:33 1633public void uploadFileClient() ... -
Java 扑克发牌算法实现
2012-03-19 21:17 5728A. 扑克发牌算法是棋牌游戏中常用的基础算法,也是游戏开发人员 ... -
64 位JDK出现八小时时差解决方法
2012-02-27 15:22 1953发布的项目使用64位JDK,Java获取的时间总比正常的时候慢 ... -
更新sequence值的动态sql语句
2011-12-27 16:08 2050一. --导出之前把该语句执行一遍,复制执行结果,然后在导入后 ... -
hibernate 乐观锁与悲观锁使用
2011-12-21 15:20 1428Hibernate支持两种锁机制 ... -
【转】实现汉字向拼音的转化
2011-12-19 22:57 2314import java.io.UnsupportedEnc ... -
不用第三个变量交换值的五个办法
2011-12-12 09:49 3026不用第三个变量交换值的五个办法 package com.k ... -
【转】细数那些令人发狂的程序语言的特性
2011-12-11 14:41 12721、C语言中的数组 在C/C++中,a[10] 可以写成 10 ... -
Java 获取系统软件安装列表
2011-12-08 19:35 1706Java获取系统软件安装列表 package com.kevi ... -
【转】 Java集合
2011-12-08 19:37 1037引用1. Set: Set是一个集合接口,它的特征和数学上的集 ... -
网页制作的小技巧
2011-12-08 19:37 814让浏览器在保存页面时失败在页面源文件上增加下面一行代码,保存页 ... -
【转】Hashtable 和 HashMap的区别
2011-12-07 18:13 915HashTable的应用非常广泛,HashMap是新框架中用来 ... -
【转】ArrayList,LinkedList,Vector 的关系和区别
2011-12-07 18:06 1769ArrayList,LinkedList,Vector这三个类 ... -
【转】HashSet,LinkedHashSet,TreeSet 区别
2011-12-07 17:57 7207引用java.util.AbstractSet-> ja ... -
【转】HashSet和TreeSet的区别
2011-12-07 17:10 1617HashSet和TreeSet的区别 一. 问题 1. H ...
相关推荐
@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。 @SuppressWarnings,关闭不当编译器警告信息。 上面这三个注解多少我们都会在写代码的时候...
@Override:重写方法 @Deprecated:废弃 @SuppressWarnings:镇压警告 元注解(meta-annotation): 可自定义注解 @Target:描述注解的使用范围,传入value参数指定 @Retention:描述注解的生命周期,传入value参数...
帮助大家复习java基础知识其中有 hashCode 2 ...@SuppressWarnings 注解 17 元注解 19 @Retention 注解 19 @Target 注解 19 @Documented注解 20 @Inherited 注解 20 异常-Exception 21 编译异常 22 异常处理 2
主要介绍了Java中三种简单注解介绍和代码实例,本文讲解了Override注解、Deprecated注解、Suppresswarnings注解、元注解等内容,需要的朋友可以参考下
目录 一 注解的定义 二 如何自定义注解 三 元注解 3.1 @Retention 3.2 @Target 3.3 @Documented 3.4 @Inherited 3.5 @Repeatable 四 Java 预置的注解 4.1 @Deprecated 4.2 @Override ...Java 注解是从 Java5 开
二、JDK中预定义的一些注解1.@Override2.@Deprecated3.@SuppressWarnings4.@SafeVarargs5.@FunctionalInterface三、自定义注解1.格式2.本质3.属性4.元注解(JDK的元Annotation)4.1.@Target4.2.@Retention4.3.@...
@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。 @SuppressWarnings - 指示编译器去忽略...
@SuppressWarnings("deprecation") //在mian方法内调用一个没有定义的方法时,运行的时候将会出现这一注解! public static void main(String [] args) { Test.sayHello(); } } @SuppressWarnings 批注允许您...
16.2.3 抑制警告SuppressWarnings433 16.3 自定义注解类型433 16.4 对注解进行注解435 16.4.1 目标Target435 16.4.2 类型Retention436 16.4.3 文档Documented437 16.4.4 继承Inherited437 16.5 利用反射获取注解信息...
注解 概述 给程序说,用于解释代码,java中类,方法,变量,参数和包都能被...java中预定义的注解 @override,强制格式检查 @@Deprecated,已经过时的方法标记 @SuppressWarnings(“all”),警告压制,all为所有警告压
@Override,@Deprecated,@SuppressWarnings为常见的3个注解。 注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后, JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上...