黑马程序员--Java学习加强22--Annotation

本文详细介绍了Java注解的概念、基本使用方法以及如何自定义注解。涵盖了标准注解如@SuppressWarnings、@Deprecated和@Override的用途,并解释了元注解@Retention和@Target的功能。此外,还通过示例展示了如何定义带有属性的注解并使用反射获取注解信息。

一、注解(Annotation)简介

      Annotation(注解)是JDK1.5及以后版本引入的一个新特性,注解是Java的一个新的类型(与接口很相似),它与类、接口、枚举是在同一个层次,它们都称为Java的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常的多,例如:进行编译检查、生成说明文档,代码分析等。

      JDK提供的几个基本注解

  • @SuppressWarnings

             该注解的作用是阻止编译器发出某些警告信息。

             它可以有以下参数:

                    deprecation:过时的类或方法警告  

                    unchecked:执行了未检查的转换时警告 

                    fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告

                     serial:  当在可序化的类上缺少serialVersionUID定义时的警告。

                    finally:任何finally子句不能完成时的警告。

                    all:关于以上所有情况的警告。

  • @Deprecated

          该注解的作用是标记某个过时的类或方法。

  • @Override

         该注解用在方法前面,用来标识该方法是重写父类的某个方法。

二、元注解

        元注解是定义在注解类的前面,注释注解的。

  • @Retention

          它是被定义在一个注解类的前面,用来说明该注解的生命周期。

          它有以下参数:

                  RetentionPolicy.SOURCE:指定注解只保留在一个源文件当中。

                  RetentionPolicy.CLASS:指定注解只保留在一个class文件中。

                  RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间。

  • @Target

           它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。它有以下参数:

                   ElementType.TYPE:说明该注解只能被声明在一个类前。

                   ElementType.FIELD:说明该注解只能被声明在一个类的字段前。

                   ElementType.METHOD:说明该注解只能在一个类的方法前。

                   ElementType. PAEAMENTER:说明该注解只能被声明在一个方法参数前。

                   ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。

                   ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。

                   ElementType.ANNOTATION_TYPE:该注解可以声明在一个注解类前。

                   ElementType.PACKAGE:该注解可以声明在一个包前。

三、注解的生命周期

          一个注解可以有三个声明周期,它默认的声明周期是保留在一个CLASS文件。但它也可以有一个@Retetion的元注解来指定它的声明周期。

  •   Java源文件

             当在一个注解前定义了一个@@Retention(RetentionPolicy.SOURCE)  的注解,那么说明该注解只保留在一个源文件当中,当编译器将原文件编译成CLASS文件时,他不会将源文件中定义的注解保留在CLASS文件中。


  • CLASS文件 

              当在一个注解前定义了一个@Retention(RetentionPolicy.CLASS)的注解,那么说明该注解只能保留在一个CLASS文件当中当加载CLASS文件到内存时,虚拟街会将注解去掉,从而在程序中不能访问。


  • 程序运行期间

               当在一个注解类前定义了一个@Retention(RetentionPolicy.RUNTIME)的注解,那么说明该注解在程序运行期间都会存在内存当中。此时,我们可以通过反射来获得定义在某个类上的所有注解。


四、注解的应用

例: 注解的定义以及反射的调用和为注解增加基本属性

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.lang.model.element.Element;

@Retention(RetentionPolicy.RUNTIME)//说明注解的生命周期
@Target({ElementType.METHOD,ElementType.TYPE})//说明注解声明的位置
public @interface MyAnnotation {
	//为注解增加属性
	String color() default "Green";
	String value();
	int[] arrayAccet();

}


public class AnnotationTest1 {
	
	@MyAnnotation(color="BULLOW",value="haha",arrayAccet={1,2,3})//自定义带属性的注解
	public static void main(String[] args)throws Exception{
		if(AnnotationTest1.class.getMethod("main", String[].class).isAnnotationPresent(MyAnnotation.class)){
			MyAnnotation myAnnotation=(MyAnnotation)AnnotationTest1.class.getMethod("main", String[].class).getAnnotation(MyAnnotation.class);
					
			System.out.println(myAnnotation);
			System.out.println(myAnnotation.color());
			System.out.println(myAnnotation.value());
			System.out.println(myAnnotation.arrayAccet().length);
		}
	}
}

运行结果:

 








先看效果: https://pan.quark.cn/s/c7070e7537b1 [!NOTE] 每到答辩季我就会喜获stars,谢谢大家的支持! 欢迎推广传播本repo(https://.com/atomiechen/THU-PPT-Theme),也欢迎贡献变体,提供更多选择 清华简约主题PPT模板 Repo stars 2020年春夏之交,答辩期间很多同学都在寻找清华主题的答辩模板。 一方面有使用LaTeX制作Beamer的模板(见Overleaf上的模板THU Beamer Theme),另一方面民间也存在着一些PPT模板。 很多人可能不适应Beamer的使用(主要是内容和排版设计不是可见即所得,定制有门槛),以及我找到的PPT模板也都不太好使(要么图案设计太复杂、不好看,要么没有制作成PPT母版导致每次使用都要复制粘贴+微调,不方便)。 我制作了清华简约主题的PPT模板,后续有新的设计我会逐渐加入,也欢迎有兴趣有想法的朋友们添砖加瓦! 内容 所有模板均为 文件。 此外也提供转换脚本用于 Pandoc自动生成PPTX。 各个版本的修改历史见 CHANGELOG.md。 下载 推荐直接从 Releases 下载最新发布版。 也可以在 仓库 单独下载所需文件。 效果 16:9比例,v1留边、v1顶边、v3留边白底、v3顶边白底: demo 16:9比例,其他风格模板:v1扁平、v2扁平、v1暗光 demo2 其他变体设计参见 variants/README.md。 使用方式 可以基于所提供的文件自行修改内容,也可以在新建的PPT文稿中应用该模板。 后者在 MS Office 2019 For Mac 的 PowerPoint 里的具体使用方式为:首先选择幻灯片尺...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值