java注解(Annotation)的简单介绍
注解你可以理解为一个特殊的类,或者接口其自定义个格式形如
public @interface 注解名(){
//注解的属性,特别提醒当注解的属性为value时,在对其赋值时,可以不写value,而直接写上值即可。
}
下面一个例子讲述了注解的基本应用:(这个例子中A代表一个注解类,写一个D注解的目的是说明一个注解类中可以有注解这个属性。B代表应用了注解类的类,C代表对应用了注解类的类进行反射操作的类。)
代码如下://定义一个注解D(D的作用只是为了说明A中可以有一个注解的属性)
package com.qls.theoryIntroduce2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface D {
String[] people() default{"王昭君","西施","阴丽华"};
}
//定义一个注解类A
package com.qls.theoryIntroduce2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**特别说明当一个类引用一个注解时,(如B类引用A注解时)A注解中没有默认值的元素必须要赋值。
*
* 从下面的定义中可以看出A注解中的内容包括:int型带有默认值。
* int型不带有默认值(在一个类中用了A注解,A必须要给caocao这个元素赋一个值)
* 数组,以及注解。
*
* @author 秦林森
*
*/
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface A {
int liubei() default 2;
int caocao();
String[] sunquan() default {"1","2","3","4"};
int[] xiaoqiao();
D daqiao() default @D;
}
//定义一个应用注解的类B
package com.qls.theoryIntroduce2;
@A(caocao=1,xiaoqiao={8,9,10})
public class B {
}
//定义一个对应用注解的类进行反射操作的类:
package com.qls.theoryIntroduce2;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* A注解的内容全部都取出来(这里需要用到反射)
* @author 秦林森
*
*/
public class C {
public static void main(String[] args) {
// TODO Auto-generated method stub
//首选判断B类中是否有A注解:
System.out.println(B.class.isAnnotationPresent(A.class));
/**
* 返回结果为true,说明有,但是在A注解中必须有一个元注解
* @Retention(RetentionPolicy.RUNTIME)否则,返回结果为false.
*/
//取出A注解中的值:
A annot = B.class.getAnnotation(A.class);
//取出caocao的值
int caocao = annot.caocao();
System.out.println("caocao="+caocao);
//取出daqiao的值
System.out.println("daqiao的值是:");//newline
for(String str:annot.daqiao().people()){
System.out.print(str+" ");
}
System.out.println();
//取出liubei
int liubei = annot.liubei();
System.out.println("liubei="+liubei);
//取出xiaoqiao的值
System.out.println("xiaoqiao的值是:");
for(int xiaoqiao:annot.xiaoqiao()){
System.out.print(xiaoqiao+" ");
}
//取出孙权的值是:
System.out.println();
System.out.println("sunquan的值是:");
for(String sunquan:annot.sunquan()){
System.out.print(sunquan+" ");
}
}
}/*Output:
true
caocao=1
daqiao的值是:
王昭君 西施 阴丽华
liubei=2
xiaoqiao的值是:
8 9 10
sunquan的值是:
1 2 3 4 *///:~
java注解(Annotation)的简单介绍的更多相关文章
- Java注解Annotation(一)
Java注解Annotation(一)——简介 这一章首先简单介绍一下注解,下一章会给出一个注解应用的DEMO. 1. 元注解 元注解的作用是负责注解其他的注解. JDK1.5中,定义了4个标准的me ...
- 深入JAVA注解-Annotation(学习过程)
JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...
- 深入学习JAVA注解-Annotation(学习过程)
JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...
- Java注解Annotation与自定义注解详解
Java注解简介 开发中经常使用到注解,在项目中也偶尔会见到过自定义注解,今天就来探讨一下这个注解是什么鬼,以及注解的应用场景和如何自定义注解. 下面列举开发中常见的注解 @Override:用于标识 ...
- Java - 注解 (Annotation)
Java - 注解 (Annotation) 一.基本的 Annotation > 使用 Annotation 时要在其前面增加 @符号,并把该 Annotation 当成一个修饰符 ...
- Java注解(Annotation)详解
转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...
- 秒懂,Java 注解 (Annotation)你可以这样学 - CSDN博客
https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人比较 ...
- java注解Annotation
扯扯注解的蛋 为什么学习注解?学习注解有什么好处?学完能做什么? 1.能够读懂别人的代码,特别是框架相关的代码 2.让编程更加简洁,代码更加清晰 3.让别人高看你一眼 注解是java1.5引入的 概念 ...
- java 注解Annotation
什么是注解? 注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的. java注解又叫java标注,java提供了一套机制,使得我们可以对 ...
- Java注解Annotation详解
从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...
随机推荐
- idea启动spring boot无法加载或找不到主类
问题产生原因:moudle名称修改,导致项目启动不了 在Terminal界面中执行以下三个命令,我在执行第一个命令的时候报了一个找不到dependency的错误,把那个报错的dependency删了就 ...
- Kubernetes-Service Account
kube-apiserver 配置文件:/etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0 ...
- [POJ 1004] Financial Management C++解题
参考:https://www.cnblogs.com/BTMaster/p/3525008.html #include <iostream> #include <cstdio> ...
- Educational Codeforces Round 47 (Rated for Div. 2) :A. Game Shopping
题目链接:http://codeforces.com/contest/1009/problem/A 解题心得: 题意就是给你两个数列c,a,你需要从c中选择一个子串从a头开始匹配,要求子串中的连续的前 ...
- HDU暑假多校第三场H.Monster Hunter
一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...
- JavaScript---设计模式之迭代器模式
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示. jQuery中我们经常会用到一个each函数就是迭代器模式 作用 为遍历不同的集合结构提供一个统一的接口,从而 ...
- 6 wireshark 安装使用 数据包抓取
1.wireshark安装 2.开始使用 3.界面详情 4. 数据包抓取 5.过滤数据
- Python正则反向引用
str2 ="2018-10-29"c =re.sub(r"(\d{4})-(\d{2})-(\d{2})","\g<1>/\g<2 ...
- 阿里的100TB Sort Benchmark排序比雅虎快了一倍还多,我的看法
如果我的判断正确,它们使用的软件和算法应该是HADOOP,MAP/REDUCE,或者类似的技术方案.如果这些条件一样,影响计算结果的还有三个因素: 1.CPU的数量和CPU的处理能力 CPU的 ...
- Julia 学习笔记(一):数组
个人向,只会记录一些需要注意的点. 前言 学习 Julia 已经有一段时间了,但是进步缓慢.这一方面是最近代码写得少,一方面是 Julia 学习资料少.中文资料更少,但也有我没做笔记的缘故导致学习效率 ...