注解在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. 用大白话聊聊JavaSE -- 如何理解Java Bean(一)

    首先,在开始本章之前,先说一个总的概念:所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件.这就是Java Bean,很多初学者,包括当年的我自己,总是被这些专 ...

  2. 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)

    在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...

  3. [2]注解(Annotation)-- 深入理解Java:注解(Annotation)自定义注解入门

    转载 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理解Java:注解(Annotation)自定义注解入门 要深入学习 ...

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

    转载:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准 ...

  5. 【转】深入理解Java:注解(Annotation)自定义注解入门

    http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的me ...

  6. Java注解(Annotation)自定义注解入门

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

  7. Java:注解(Annotation)自定义注解入门

    转载地址:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的 ...

  8. 注解(Annotation)自定义注解入门

    摘自:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准 ...

  9. 深入理解Java的注解(Annotation):自定义注解入门(2)

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

随机推荐

  1. 关于shiro

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  2. org.apache.jasper.JasperException:省略"/html/sysmaintain/authority/user/../../module/verify_login.jsp" not found

    说明了JSP页面里引用安全登录页面的jsp路径代码:<%@ include file="../../module/verify_login.jsp"%>这句代码引用的路 ...

  3. SQL Server全时区转换

    SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...

  4. ABP理论学习之Swagger UI集成

    返回总目录 本篇目录 介绍 安装 安装Nuget包 配置 测试 介绍 从官方网站上可以看到:"启用了Swagger API,就可以获得交互式文档,生成和发现客户端SDK". 安装 ...

  5. 辛巴学院-Unity-剑英陪你零基础学c#系列(三)计算与类型

    辛巴学院:正大光明的不务正业. 中秋节快乐,每逢佳节倍思亲,尤其是那素未谋面的老婆,对吧,屌丝们.   今天我们来探索一下C#里面奇怪的计算,奇怪的类型. 奇怪的计算 当我刚刚接触计算机编程的时候,一 ...

  6. Javascript模拟继承(赠送.net吐槽一段)

    首先吐槽一句,今年的就业形势很不乐观啊,特别是搞.net的(相对java),特特别是还没出校门没有正式工作经验的,找个实习很难,前些天接了个面试电话,上来就质疑我“你一个在校大学生怎么可能做了那么多项 ...

  7. ASP.NET MVC 过滤器(五)

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  8. [ASP.NET MVC 小牛之路]15 - Model Binding

    Model Binding(模型绑定)是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程.我们之前所有示例中传递给 Action 方法参数的对象都是在 Model Binding ...

  9. WinRAR 4.20 beta2 key!注册文件 注册码

    WinRAR 4.20 beta2 key!注册文件 注册码 WinRAR 4.20 beta2注册文件 WinRAR 4.20 beta2 working key ================= ...

  10. Hibernate增删查改语句

    我用的数据库是MySQL,实体类叫Product create table Product ( proId integer not null auto_increment, proName varch ...