文章目录

  • 标(注解)
  • 战场
  • 开战
    • 战争开始
    • 颜良进入战场
    • 关羽进入战场
    • 文丑进入战场
  • 战争结束

关公举目一望,谓操曰:“吾观颜良,如插标卖首耳!”

Java 注解并不是程序,只是 Java 程序中的一个标识,Java 程序可以通过这个标识进行一些判断,执行不同的计算和流程。

三国演义中,关公说颜良是插标卖首,这个所谓的 其实和 Java 中的注解有异曲同工之意,都是在人或者代码的头上标注一个东西。

现在,我们就用 Java 注解的功能模拟一下关公斩颜良诛文丑的过程吧。

首先,先创建一个 Person 类,该类代表了所有人,这个类的实例对象,可能是关公,也可能是颜良文丑,也可能只是一个普通的小兵。

public class Person {/*** 是否已死亡*/private boolean die = false;/*** 是否死亡** @return 是否死亡*/public boolean isDie() {return this.die;}/*** 被杀*/public void beKilled() {this.die = true;}/*** 杀人** @param person 被杀的人*/public void killed(Person... persons) {for (Person person : persons) {if (person != null) {person.beKilled();}}}}

标(注解)

其次,应该创建一个 Java 注解,这个注解也就是关公所谓的 ,可以在这个标上添加姓名属性,这样就可以通过这个 找到对应的角色。

/*** <p>- @Target(ElementType.FIELD) 该注解只允许在类属性上标注</p>* <p>- @Retention(RetentionPolicy.RUNTIME) 该注解保留到运行时</p>* <p>- @Inherited 该注解会被子类继承</p>* <p>- @Documented 该类会被 javadoc 生成的文档显示出来</p>*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Name {String value() default "小兵";
}

战场

既然一切准备就绪,那就可以布置战场了,创建一个战争 Java 类表示战场。

/*** 关公举目一望,谓操曰:"吾观颜良,如插标卖首耳!"*/
public class War {// 战场中的角色private Person person1 = new Person();private Person person2 = new Person();private Person person3 = new Person();private Person person4 = new Person();private Person person5 = new Person();private Person person6 = new Person();public static void main(String[] args) throws IllegalAccessException {War war = new War();war.start();}/*** 战争开始了*/public void start() throws IllegalAccessException {Person 关羽 = findPerson("关羽");Person 颜良 = findPerson("颜良");Person 文丑 = findPerson("文丑");System.out.println();checkStatus();if (关羽 != null) {关羽.killed(颜良, 文丑);checkStatus();System.out.println("关羽" + (颜良 == null ? "" : "斩颜良") + (文丑 == null ? "" : "诛文丑"));}}/*** 通过姓名找到注解标识了姓名的对应角色** @param name 姓名* @return 注解标识了姓名的对应角色*/public Person findPerson(String name) throws IllegalAccessException {Field[] fields = War.class.getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(Name.class)) {Name annotation = field.getAnnotation(Name.class);if (annotation.value().equals(name)) {System.out.print(name + "在战场上\t");return (Person) field.get(this);}}}System.out.print(name + "不在在战场上\t");return null;}/*** 检查当前战场上使用注解标注了姓名的角色的生死*/public void checkStatus() throws IllegalAccessException {Field[] fields = War.class.getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(Name.class)) {Name annotation = field.getAnnotation(Name.class);Person person = (Person) field.get(this);if (person.isDie()) {System.out.print(annotation.value() + "死了\t");} else {System.out.print(annotation.value() + "活着\t");}}}System.out.println();}}

开战

战争开始

模拟战争开始,直接先执行 main 方法。

战争结果:

关羽不在在战场上 颜良不在在战场上    文丑不在在战场上

颜良进入战场

War 类的某个 Person 类型的属性上,注解上 @Name("颜良")注解,标注姓名。

@Name("颜良")
private Person person4 = new Person();

战争结果:

关羽不在在战场上 颜良在战场上  文丑不在在战场上
颜良活着

关羽进入战场

War 类的某个 Person 类型的属性上,注解上 @Name("关羽")注解,标注姓名。

@Name("关羽")
private Person person6 = new Person();

战争结果:

关羽在战场上   颜良在战场上  文丑不在在战场上
颜良活着    关羽活着
颜良死了    关羽活着
关羽斩颜良

文丑进入战场

War 类的某个 Person 类型的属性上,注解上 @Name("文丑")注解,标注姓名。

@Name("文丑")
private Person person5 = new Person();

战争结果:

关羽在战场上   颜良在战场上  文丑在战场上
颜良活着    文丑活着    关羽活着
颜良死了    文丑死了    关羽活着
关羽斩颜良诛文丑

战争结束

关公纵马上山,众将尽皆称贺。公献首级于操前。操曰:“将军真神人也!”

在这段 Java 程序中,Java 代码始终没有任何改变,仅仅只是添加了一些注解,最后的运行结果就完全不一样。这就是 Java 注解的功能,虽然本身不是程序代码的一部分,但是却是代码的标识,可以在程序运行的时候,通过这个标识进行一些判断,执行不同的计算和流程。

现在的大部分的 Java 框架,都有基于 Java 注解的使用版本,原理都是一样的。

本身就是在框架中对框架自定义的注解进行了一些程序判断和处理,使用者只需要在一些代码上标识一些注解,程序就可以按照框架的处理逻辑对这些代码进行处理。

Spring、MyBatis、Hibernate 等框架尽皆如此。

【小剧场】Java注解:斩颜良诛文丑,插标卖首尔相关推荐

  1. Java注解---通俗易懂

    本文转载于Java注解-最通俗易懂的注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解. 我个人认为,比较糟糕的技术文 ...

  2. java 注解继承注解_Java注解合并,注解继承

    spring中有时候一个类上面标记很多注解. 实际上Java注解可以进行继承(也就是把多个注解合并成1个) 比如说SpringMVC的注解 @RestController @RequestMappin ...

  3. (原创)JAVA注解应用——实现属性的自动检测

    一.什么是注解 Annotation(注解)是JDK5.0及以后版本引入的新特性.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以'@注解名'在代码中存在的,根据注解参数的个数 ...

  4. 干掉前端!3分钟纯 Java 注解搭个管理系统,我直接好家伙

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好 ...

  5. 学长告诉你 java注解——深入浅出

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制. Java 语言中的类.方法.变量.参数和包等都可以被标注.和 Javadoc 不同,Java 标注可 ...

  6. Java注解基本原理

    Java注解基本原理 注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁. 注解的语法比较简单,除了@符号的使用之外,它基本与Java固有 ...

  7. 【Java注解】注解基础

    笔记来源:IMOOC Java注解 注解的分类 按照运行机制分 源码注解:注解只在源码中存在,编译成 .class 文件就不存在了 编译时注解:注解在源码和 .class 文件中都存在 运行时注解:在 ...

  8. Java深度历险:Java注解

    2019独角兽企业重金招聘Python工程师标准>>>     在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道.以Java EE中典型的S(pri ...

  9. 你真的会用java注解吗?

    "揭开java注解的神秘面纱" 介绍 想必大家在接触java,甚至部分工作几年的,对于类.方法.字段上的 @xxx 都有一种迷茫:这是啥玩意,它是怎么运行起来的? 别慌,这就是ja ...

最新文章

  1. 【Python】百度翻译的爬虫实现(后篇)
  2. 手把手教你画酷炫环形图(图文详解)
  3. 微信小程序(6)模板详解 template
  4. pageHelper插件
  5. U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS
  6. git clone 某次提交前代码_git提交代码常用命令
  7. html 三大标签,网站三大标签的正确书写
  8. 一本关于网上支付解决方案的迷你百科全书
  9. 信息架构、结构图、流程图
  10. 使用免费软件Emu8086学习汇编
  11. 安规认证的测试项目(工程师必须知道的知识)
  12. Javascript特效代码大全(420个)
  13. 葵花卫星数据介绍与下载教程
  14. python中flag标志用法_标记变量flag的用法
  15. 用网页服务器实现钢琴弹奏(使用Wizwiki-W7500)
  16. HOOFR: 增强型仿生特征提取器
  17. pymssql连接sql server报错Unable to connect: Adaptive Server is unavailable
  18. 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a
  19. ROS基础(13)——机器人建模之运动仿真
  20. 18 - java基初 数组介绍 冒泡排序

热门文章

  1. 课堂笔记_ 光线跟踪原理
  2. RVIZ界面没有显示joint publishe的GUI界面解决方法
  3. OGRE3D引擎入门重拾
  4. npm-run-script
  5. 基于SpringBoot婚纱影楼摄影预约网站
  6. OpenHarmony源码
  7. linux在没网的情况下安装libreoffice
  8. 淘宝开放平台的认证授权机制
  9. 最近在研究oday技术............
  10. faceu激萌相机里面vue_激萌相机怎么玩?激萌相机faceu使用教程[多图]