栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA里面的注解(Annotation)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA里面的注解(Annotation)

 (1)Annotation其实就是代码里面的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

(2)Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotation的"name = value"对中。

(3)在JavaSE里面,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE 里面,注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE 旧版中所遗留的代码和XML配置等。

(4)未来的开发模式都i是基于注解的,JPA 和Spring 都是基于注解模式的,一定程度上可以说

         框架 = 注解 + 反射 + 设计模式

注解的使用示例

* (1)生成文档相关的注解如@author和@version等
* (2)在编译时进行格式检查(JDK内置的三个基本注解)
* @override:限定重写父类方法,该注解只能用于方法
* @Deprecated:用于表示所修饰的元素(类、方法等)已经过时了
* @suppressWarnings:抑制编译器警告
* (3)跟踪代码依赖性,实现替代配置文件的功能
*

 如何自定义注解?

public @interface MyAnnotation {
    String value() default "hello";
}

(1)注解声明为@Interface 

(2)内部定义成员,通常使用value表示 

(3)可以指定成员的默认值,使用default定义 

(4)如果自定义注解没有成员,则表示是一个标识 

如果注解有成员在使用注解的时候需要指明成员的值,如果成员有默认值不指定也行。

自定义注解需要配上注解的信息处理流程(反射)才有意义,即在某个方法或类上面标明了某个 * 注解后,再使用反射去读取注解的值,才能发挥注解的作用。

JDK提供的四个元注解。元注解:即对现有注解进行解释说明的注解。
 
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}


(1)Retention:该注解用于指定一个注解的生命周期,有三个周期可以指定即source class runtime。

当指定了@Retention(RetentionPolicy.SOURCE)修饰注解的时候,Annotations are to be discarded by the compiler.即在.class文件里面见不到@Retention修饰的注解。

当指定了@Retention(RetentionPolicy.CLASS)修饰某个注解的时候,在.class文件里面可以看见该注解,但是在JVM里面看不见了。如果没有指定RetentionPolicy默认为CLASS。

当指定了@Retention(RetentionPolicy.RUNTIME)修饰某个注解的时候,在.class文件里面可以看见该注解,在JVM内存里面也可以看见。

只有声明为@Retention(RetentionPolicy.RUNTIME)的注解才可以通过反射来获取。

(2)Target

用于指定被修饰的注解可以修饰哪些程序元素,如可以修饰类、构造器、方法、属性啊等

下面两个注解用得比较少:

(3)documented 表明所修饰的注解在被javadoc解析时会被保留下来,默认的时不保留的。
(4)Inherited 被它修饰的注解将具有继承性,如果父类声明了该注解,那么它的子类也会有该注解。

通过反射获得注解信息:

注解在Employee上面

 通过反射得到注解的相关信息

public class AnnotattionTest01 {

    public static void main(String[] args) {
        Class employeeClass = Employee.class;
        Annotation[] annotations = employeeClass.getAnnotations();
        for(int i = 0;i < annotations.length;i++){
            System.out.println(annotations[i]);
        }

    }
}


//输出::::@com.sf.jinjian.annotation.MyAnnotation(value=hi)

JDK8里面的一些新特性;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号