吃透Java基础十:注解

一、什么是注解

官方定义:

注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。

注解有许多用处,主要如下:

  • 提供信息给编译器:编译器可以利用注解来探测错误和警告信息。
  • 编译阶段时的处理:软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。
  • 运行时的处理:某些注解可以在程序运行的时候接受代码的提取

值得注意的是,注解不是代码本身的一部分。

我们通俗一点理解就是:注解就相当于超市里面商品的标签,它不属于商品,它只是为商品做一些解释说明,而注解就是为我们的代码作解释说明,并不属于我们代码本身的部分。

二、注解的使用

JDK中提供的注解*

JDK里面提供的几个注解

  • @Override: java.lang.Override 是一个标记类型注解,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。如果我们使用了这种注解在一个没有覆盖父类方法的方法时,java 编译器将以一个编译错误来警示。
  • @Deprecated:表示该方法已经过时了。(当方法或是类上面有@Deprecated注解时,说明该方法或是类都已经过期不能再用,但不影响以前项目使用,提醒你新替代待的方法或是类。如果程序员不小心使用了它的元素,那么编译器会发出警告信息。)
  • @SuppressWarnings:表示忽略指定警告,比如@SuppressWarnings("Deprecation")
  • @SafeVarargs:参数安全类型注解。它的目的是提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。它是在 Java 1.7 的版本中加入的。
  • @FunctionalInterface:函数式接口注解,这个是 Java 1.8 版本引入的新特性。

元注解

java.lang.annotation 提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解)。

  • @Retention:定义该注解的生命周期。

RetentionPolicy.SOURCE:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。

RetentionPolicy.CLASS:注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。

RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。

  • @Target:表示该注解用于什么地方。默认值为任何元素,表示该注解用于什么地方。可用的ElementType 参数包括:

ElementType.CONSTRUCTOR: 用于描述构造器。

ElementType.FIELD: 成员变量、对象、属性(包括enum实例)。

ElementType.LOCAL_VARIABLE: 用于描述局部变量。

ElementType.METHOD: 用于描述方法。

ElementType.PACKAGE: 用于描述包。

ElementType.PARAMETER: 用于描述参数。

ElementType.TYPE: 用于描述类、接口(包括注解类型) 或enum声明。

  • @Documented:一个简单的Annotations 标记注解,表示是否将注解信息添加在java 文档中。
  • @Inherited :表示当前注解可以由子注解来继承。
  • @Repeatable:是可重复的意思,Java 1.8 才加进来的,指的是注解的值可以同时取多个。

自定义注解

  • Annotation型定义为@interface,所有的Annotation 会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口。
  • 参数成员只能用public 或默认这两个访问权修饰,可以用default设置默认值。也可以不定义成员。
  • 参数成员只能用基本类型byte、short、char、int、long、float、double、boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组。
  • 要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation 对象,因为你除此之外没有别的获取注解对象的方法
吃透Java基础十:注解

注解经典运用

运行期利用反射可以获取注解:详情请移步[吃透Java基础六:反射](https://blog.csdn.net/u013277209/article/details/102782208)

注解+反射 在数据库框架方面的应用:

有一张用户表,包含id name age gender 对每一个字段进行检索并打印出Sql语句

1、自定义Table和Column注解

吃透Java基础十:注解

2、编写User类

吃透Java基础十:注解

3、利用反射获取注解信息,实现Sql语句查询

吃透Java基础十:注解

运行输出:

吃透Java基础十:注解


分享到:


相關文章: