注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因:

1. 可以更深层次地学习Java,理解Java的思想.

2. 有了注解的基础,能够方便阅读各种框架的源码,比如hibernate,SpringMVC等等。里面就用到了大量的注解。即便无法阅读源码,以后使用这些框架,会有一种心理上的安全感

3. 方便今后跟别人吹牛。(当然,这也很重要。)

好了,话不多说,我们开始吧。

1. 从注释的角度来理解注解

我想了很久,最终决定以这个小标题作为第一节的标题,我们在编写Java代码的时候,为了让我们的代码看起来通俗易懂,就会加上注释信息。

比如,我们写一个方法,会标注上这个方法的作者,作用,版本等信息。是的,作为一个程序员,编写优雅的注释是一个非常重要的好习惯。

例:

/*** 用于判断是否是空字符串* 方法名:isEmpty* 创建人:剽悍一小兔* 时间:2016年9月21日-下午6:56:33* @param str* @return boolean*/
public static boolean isEmpty(String str) {return null == str  || str.equals("")|| str.matches("\\s*");
}

这是一个字符串判空的函数,函数名为isEmpty,虽然看名字大概也能猜到它的作用,可是,一旦加上了注释,瞬间就变得更加清晰了,不是吗?

这种注释,当代码被执行的时候,执行机制会自动忽略掉他们,因为这些文字其实是给程序员看的,而不是给执行机制看的。

写注释是一种美德。

那么,注解又是什么呢?

我个人对它的看法是:所谓的注解,就是写给电脑看的高级注释。

你可能经常会看到代码里面出现@XXX的标志,乍一看感觉挺高深的。反正我当年就是这种感觉,头脑里第一个反应就是这肯定很难!

我还是那句话,如果你总想着复杂,那么就永远看不到简单。

我们写注释,是给人看的,而注解就是写给电脑看的。就这么简单。

这么说可能有点抽象,没关系,我们来一个快速入门吧。

2.提出问题

新建一个Java项目

项目名称就叫做Annotation吧

在src旁边右键,新建一个util包,也就是工具包。

弄一个专门处理日期的工具类

随便写一个日期格式化的方法。

package util;import java.util.Date;
import java.text.SimpleDateFormat;public class DateUtil {public static String formatDate( Date date , String formatPattern ){return new SimpleDateFormat(formatPattern).format(date);}}

注意,导包的时候要是java.util.Date;,而不是java.sql.Date;

测试:

Date now = new Date();//获取当前日期
System.out.println(now);
System.out.println(formatDate(now,"yyyy-MM-dd hh:mm:ss"));

控制台打印:
Wed Sep 21 19:24:57 CST 2016
2016-09-21 07:24:57

这说明,我们写的方法应该是正确的。

很好,那么接下来要解决一个什么问题呢?就是说,如果我想通过代码来获取关于这个方法的信息,那么该如何做呢?

写注释肯定是不行的,因为注释是写个程序员看的,电脑看不懂,更别提获取注释的内容了,是吧?

于是,注解,这一种高级的注释就出现了。

3.编写注解

关于注解,要明确三个问题:

  1. 要给谁加注解啊?
  2. 什么时候注解起作用啊?
  3. 要注解那些东西呢?

因为是快速入门,所以大概知道这些就足够了。

现在,我们来新建一个注解,毫无疑问,所谓的注解,它还是一个Java类,你不要被它吓到。

新建一个注解包。

new一个Annotation,就叫MethodNote,意思就是说,这个是加在方法上的,为了给方法加一些电脑能看得懂的说明。

第一个问题是要给谁加注解啊?那么,这个注解类是需要加在方法上的,于是就这样写:

这就表示,该注解要加在方法上。

接下来,让我们来明确第二个问题:什么时候注解起作用啊?

我们希望在程序运行的时候,注解发挥作用,就是说,当你的程序跑起来了,电脑才开始阅读这些注解。

这句话的意思就是说,我这个注解啊,是在程序跑起来的时候,RUNTIME嘛,就是跑起来的时候,才发挥作用的。

非常好,那么最后一个问题:要注解那些东西呢?

一个方法,最重要的信息包括:作用,创建时间,作者,版本,返回值等等。我们随便抽取几个,就作用和创建时间吧!

这种写法有点类似于写接口的方法。

好了,我们的第一个注解就编写完成了!写好了就马上用呗,现在我们给日期格式化的方法加上咱自己编写的注解。

@MethodNote(createTime = "2016-9-21")
public static String formatDate(Date date , String formatPattern){return new SimpleDateFormat(formatPattern).format(date);
}

这就是所谓的注解,其实也很简单的吧。就是这么来的,它归根到底还是一个Java类。

4.通过Java反射获取方法的注解信息

好了,回到正题,我们已经对formatDate方法进行了注解,那么,既然这个注解是写给电脑看的,那么电脑就肯定有办法在其他Java类中获得这些信息,对吧?

如何获得呢,对了,用反射机制。

上代码:

public static void main(String[] args) throws NoSuchMethodException, SecurityException {Class classOfDateUtil = DateUtil.class;Method formatDate = classOfDateUtil.getMethod("formatDate", Date.class,String.class);MethodNote methodNote = formatDate.getAnnotation(MethodNote.class);System.out.println("方法描述:" + methodNote.description());System.out.println("创建日期:" + methodNote.createTime());
}

结果:

方法描述:作者很懒,没有写本方法的作用。
创建日期:2016-9-21

本章结束 …

本章对Java自定义注解做了一个快速入门,希望对你有所帮助。

用大白话聊聊JavaSE -- 自定义注解入门相关推荐

  1. 深入理解Java:注解(Annotation)自定义注解入门

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  2. 转载:用大白话聊聊分布式系统

    转载:http://blog.csdn.net/zhousenshan/article/details/71304922?locationNum=10&fps=1 转载于:https://ww ...

  3. 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器

    深入理解Java:注解(Annotation)基本概念 什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadat ...

  4. 干货,springboot自定义注解实现分布式锁详解

    背景 在互联网的很多场景下,会产生资源竞争,如果是单机环境,简单加个锁就能解决问题:但是在集群环境下(分布式环境),多个客户端在一个很短的时间内竞争同一服务端资源(如抢购场景),或者同一客户端重复提交 ...

  5. 用自定义注解做点什么——自定义注解有什么用

    用自定义注解做点什么 前言 你不一定听过注解,但你一定对@Override不陌生. 当我们重写父类方法的时候我们就看到了@Override.我们知道它表示父类方法被子类重写了. 现在告诉你,@Over ...

  6. Spring 自定义注解玩法大全,从入门到…

    在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...

  7. mybatis对java自定义注解的使用——入门篇

    转自:https://www.cnblogs.com/sonofelice/p/4980161.html 1. 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的myb ...

  8. @aspect注解_Spring自定义注解玩法大全,从入门到放弃

    在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...

  9. java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点:元数据 注解的分类 内置注解 自定义注解 注解处理器 Serv ...

  10. 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...

最新文章

  1. WCF 第二章 契约
  2. 复习01统计学习方法(机器学习中的重要概念)---图片版
  3. [转载]Python方法绑定——Unbound/Bound method object的一些梳理
  4. php配置email支持_配置php自带的mail功能
  5. Hibernate 实体映射类的状态值自动转换
  6. *1408素数回文数的个数
  7. 用python做毕业设计小程序_用Python写一个模拟qq聊天小程序的代码实例
  8. python使用ddt_python使用ddt模块对用例执行操作
  9. Hadoop集群环境搭建之伪分布式搭建流程
  10. C++ Deque(双向队列
  11. cookie工作流程
  12. 打开你的脑洞:NER如何进行数据增强 ?
  13. 【物理应用】基于matlab GUI功率谱估计【含Matlab源码 329期】
  14. 【小技巧】2345——劫持IE浏览器主页
  15. 计算机网络基础课程思政,《计算机网络技术》课程思政融入.pdf
  16. 学生HTML个人网页作业作品:基于web在线汽车网站的设计与实现 (宝马轿车介绍)
  17. Ubuntu20.4:安装OpenCV4,配置vscode+CMake作为基本开发环境
  18. 研发Owner的职责
  19. kali-top10-Nmap
  20. 暗色调,调出紫红色的暗调晨曦照片效果(转)

热门文章

  1. 《Unity资源加密》(Yanlz+Unity+XR+资源加密+立钻哥哥+==)
  2. 灵遁者第一部诗歌集《触摸世界》上集40首诗歌欣赏
  3. 数据库的隔离级别以及锁的关系的思考
  4. 安装odoo小程序商城模块报错 KeyError: u'oejia_weshop'
  5. Day08 - HTML5 Canvas 实现彩虹画笔绘画板指南
  6. CTGU实验5_2-创建还书罚款触发器
  7. 依图芯片服务器,依图推出云端AI芯片,1台机柜支撑起万路智能视频解析
  8. android 实现果冻动画效果,HTML5/Canvas粘滑的果冻动画特效
  9. JAVA类计算机专业毕业设计题目课题选题
  10. 【干货】提升个人能力的宝藏。适合大学生学习的网站