一、先了解以下4个元注解

@Documented

具体来说是生成说明文档时把类的解释添加进去。

@Inherited 允许子类继承父类中的注解

@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中

public enum ElementType {

TYPE,  //给类(型)注解

FIELD, //给字段注解,不要忘了,字段可以是对象

METHOD, //给方法注解

PARAMETER, //给参数注解

CONSTRUCTOR, //给构造方法注解

LOCAL_VARIABLE, //给局部变量注解

ANNOTATION_TYPE,//给注解注解(这貌似把自己不当类来看)

PACKAGE, //给包注解

TYPE_PARAMETER, //不知道,等知道了我再写在这里

TYPE_USE //这个也不知道

}

@Retention  表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中

public enum RetentionPolicy {

SOURCE, //源码状态运行,

CLASS, //编译类文件时运行

RUNTIME //运行时运行

}

二、再看一个Demo

注解定义

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(value = { ElementType.FIELD })

@Retention(RetentionPolicy.RUNTIME)

public @interface UserAnnotation {

public int id() default 0;

public String name() default "";

public int age() default 18;

public String gender() default "M";

}

public class User {

int id;

String name;

int age;

String gender;

public User(int id, String name, int age, String gender) {

this.id = id;

this.name = name;

this.age = age;

this.gender = gender;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

}

import java.lang.annotation.ElementType;

import java.lang.annotation.Target;

import java.lang.reflect.Field;

public class TestMain {

@UserAnnotation(age = 20, gender = "F", id = 2014, name = "zhangsan")//注解的使用

public Object obj;

public static void main(String[] args) throws Exception {

Field objField = TestMain.class.getField("obj");

UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);//得到注解,起到了标记的作用

System.out.println(ua.age() + "," + ua.gender() + "," + ua.id() + "," + ua.name());

//***进一步操作的话,假设Object要指向一个User类,那么可以讲注解的值给他

TestMain tm = new TestMain();

objField.set(tm, new User(ua.age(), ua.gender(), ua.id(), ua.name())); //不错吧,将自己的信息送给obj,起到了附加信息的作用

//-----------请自由遐想吧~~,下面来说说注解怎么能获得注解自己的注解-------------

Target t = ua.annotationType().getAnnotation(Target.class);

ElementType[] values = t.value();

//~~~~~~~~~~~~~~完了,再一次自由遐想吧~~~~~~~~~~~~~~

String words="疯狂";

System.out.println(words);

}

}

java注解编程_Java注解编程原理相关推荐

  1. java注解编程_java 注解 基本原理 编程实现

    java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说, 反射的定义应该包含注解才合理一些.当然,这只是个人想法,至于j ...

  2. java并发排它锁_Java并发编程进阶——锁(解析)

    一.锁是什么 java开发中进行并发编程时针对操作同一块区域时,如果不加锁会出现并发问题,数据不是自己预计得到的值.我觉得有点像mysql事务中脏读.不可重复读.幻读的问题.加锁的目的是为了保证同一时 ...

  3. java 函数式编程_Java函数式编程:Javaslang入门

    java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...

  4. Java注解 编译_Java注解处理器学习之编译时处理的注解详析

    1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解. 编译时注解跟运行时注解到底区别在什么地方?其实说大也不大 ...

  5. java 注解值_java 注解默认值操作

    我就废话不多说了,大家还是直接看代码吧~ package com.zejian.annotationdemo; import java.lang.annotation.ElementType; imp ...

  6. java uv实例_Java注解的实际应用案例讲解

    前言 注解确实是一个很强大的功能,是的开发效率大幅度提高.在Android开发中,比较有名气的注解框架当属:Butterknife.https://github.com/JakeWharton/but ...

  7. java 反射 注解 运用_Java注解与反射的使用

    打开 Eclipse,新建 Java 项目"注解与反射",在 src 下右键并建立包 "注解与反射",在包下右键并建立 Annotation (注解)文件,名称 ...

  8. java注解机制_Java 注解机制

    一.注解中的信息已经在Class中了,我们应该如何读取出来 1 java.lang.reflect.AnnotatedElement接口:2 3 publicAnnotation[] getAnnot ...

  9. java 注解学习_java注解的学习

    package package3; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; im ...

最新文章

  1. Database之SQLSever:SQL命令实现理解索引、规则、默认概念及其相关案例之详细攻略
  2. apache 版本_Apache Hudi 0.5.1版本重磅发布
  3. 微型计算机系统性能优化及测试,微型计算机系统测试、优化和升级基础知识习题...
  4. linux内核在什么目录结构,Linux Kernel 目录结构说明
  5. FreeRTOS+STM32F103中断中发送任务通知单片机死机问题
  6. Hyper-v 虚拟机使用NAT方式连接网络
  7. 推荐一款图片轮换jQuery插件
  8. Open3d之RGBD测程法
  9. Kubernetes 配置私有镜像仓库时,没有权限访问的问题
  10. 如何去除数据表中的重复数据
  11. Matlab中的两种曲线平滑函数
  12. MFC小游戏之坦克大战
  13. 播音主持必练的绕口令
  14. 2016微信数据报告 大数据展示微信生活
  15. 使用GSM6315模块,采用http或者https协议与服务器通信笔记
  16. 使用RDS for MySQL数据库(本地连接、数据库迁移、JDBC操作)
  17. R 语言assign 和get 函数用法
  18. bios怎么设置USB启动
  19. 线程的共享资源与独立资源
  20. 获取微信昵称、头像等信息方法

热门文章

  1. LeetCode: Merge k Sorted Lists
  2. VC中ADO连接SQLSERVER的几种标准方式?
  3. [JavaScript]让footer总是停留在页面的底部(footer all the way at the bottom of the page)
  4. bmp调色板颜色信息重复_如何更改 Linux 终端颜色主题 | Linux 中国
  5. php+条件限定符,const 限定符
  6. php异步请求$.post,如何用PHP实现异步请求、忽略返回值
  7. 825. 适龄的朋友
  8. Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)
  9. java拆装_JAVA线性表拆解
  10. 160 - 17 bjanes.3