Java注解

  Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。

常用註解

  在日常編程中,我們遇到的註解有@Override、@SuppressWarnings等等,@Override表示重寫父類的方法,@SuppressWarnings表示忽略警告信息。

用法如下:

package com.ares.Temp;

/**
* @author Ares
*/
public class T { @SuppressWarnings("unused")
public static void test(){
int i;
System.out.println("This is a test.");
} @Override
public String toString(){
return "Test Class";
} }

Override 和 SuppressWarnings

自定義註解

  它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,下面,我們用代碼來演示。

package com.annotation.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitColor { enum Color{RED,YELLOW,WHITE} Color fruitColor() default Color.RED; }
package com.annotation.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitName { String value() default ""; }
package com.annotation.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitProvider { int id() default 0; String user() default ""; String address() default ""; }

以上是定義的蘋果的相關信息,下面,我們開始使用上面定義的註解來進行具體的實現:

package com.annotation.test;

import com.annotation.test.FruitColor.Color;

public class Apple {

    @FruitName(value="FuShi Apple")
private String fruitName; @FruitColor(fruitColor=Color.RED)
private String fruitColor; @FruitProvider(id=1,user="Tom",address="China")
private FruitProvider provider;
}

上面的Apple類是使用我們自己定義的註解來對類成員進行修飾。接下來,我們獲取我們的註釋信息:

 package com.annotation.test;

 import java.lang.reflect.Field;

 public class Test {

     public static void getFruitInfo(String clas){
try {
Class<?> cls = Class.forName(clas);
Field[] fields = cls.getDeclaredFields(); for (Field field : fields) {
if(field.isAnnotationPresent(FruitName.class)==true){
FruitName name = field.getAnnotation(FruitName.class);
System.out.println("Fruit Name:"+name.value());
}
if(field.isAnnotationPresent(FruitColor.class)){
FruitColor color = field.getAnnotation(FruitColor.class);
System.out.println("Fruit Color:"+color.fruitColor());
}
if(field.isAnnotationPresent(FruitProvider.class)){
FruitProvider Provider = field.getAnnotation(FruitProvider.class);
System.out.println("Fruit FruitProvider: ProviderID:"+Provider.id()+" Provider:"+Provider.user() +" ProviderAddress:"+Provider.address());
}
} } catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
getFruitInfo("com.annotation.test.Apple");
} }

輸出結果爲:

Fruit Name:FuShi Apple
Fruit Color:RED
Fruit FruitProvider: ProviderID:1 Provider:Tom ProviderAddress:China

最新文章

  1. Selenium实战脚本集(3)--抓取infoq里的测试新闻
  2. servlet、filter、listener、interceptor之间的区别和联系
  3. 使用Nginx和Logstash以及kafka来实现网站日志采集的详细步骤和过程
  4. MYSQL数据库性能调优之二:定位慢查询
  5. BestCoder Sequence
  6. HDOJ 3466 Proud Merchants
  7. segue生命周期
  8. python socket编程学习笔记2
  9. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)
  10. JDK下载和安装
  11. 动态添加删除网卡 - 每天5分钟玩转 OpenStack(156)
  12. Maven settings.xml配置解读
  13. Building Apps for Windows 10 on LattePanda–Jump Start
  14. UE4 UnLoadStreamLevel
  15. poj 3384 半平面交
  16. 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
  17. Canal使用小结
  18. Android--从系统Gallery获取图片
  19. SAP PI
  20. c#中使用excel

热门文章

  1. unity, editorWindow lose data when enter play mode
  2. try、finally代码块有无return时的执行顺序
  3. shell脚本 批量转换目录下文件编码
  4. 穷人的语义处理工具箱之中的一个:语义版Jaccard
  5. 【C语言】C语言程序所占内存分类
  6. js基本知识3
  7. 悦铃文件必须是CCITT A_Law格式的,且没有被压缩
  8. hive中创建hive-json格式的表及查询
  9. JackSon解析json字符串
  10. C#实例.net_经典例子400个