首页 > 编程知识 正文

注解annotation简单代码,注解符号怎么添加

时间:2023-05-04 05:14:25 阅读:254329 作者:3635

注解 1.注解概述2.自定义注解3.注解的使用4.注解处理器5.元注解6.注解的使用场景

1.注解概述

注解概念:说明程序的。给计算机看的。
注释概念:用文字描述程序的。给程序员看的
注释是Java代码中增加“额外”信息的一种方式。

注释中的描述,是一种人为的约定javac在编译时,对其“视而不见”只有固定语法,没有标准形式

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
概念描述
* JDK1.5之后的新特性
* 说明程序的
* 使用注解:@注解名称

作用分类
编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
代码分析:通过代码里标识的注解对代码进行分析【使用反射】
编译检查:通过代码里标识的注解编译器能够实现基本的编译检查【Override】

JDK中预定义的一些注解
* @Override :检测被该注解标注的方法是否是继承自父类(接口)的
* @Deprecated:该注解标注的内容,表示已过时
* @SuppressWarnings:压制警告
* 一般传递参数all @SuppressWarnings(“all”)

2.自定义注解

自定义注解格式

元注解
public @interface 注解名 {
定义体
}


本质:注解本质上就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation {}

属性:接口中的抽象方法
要求:
1.属性的返回值类型有下列取值

基本数据类型String枚举注解以上类型的数组

2.定义了属性,在使用时需要给属性赋值

若定义属性时,使用default默认初始化值,则使用注解时可不进行属性的赋值。若只有一个属性需要赋值,且属性的名称是value,则value可省略,直接定义值即可。数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略

注意:
从形式上看,十分类似于接口定义;@必不可少;注解之间不能继承:
自定义注解体的说明:

格式类似接口中的方法定义,但含义完全不同方法名就是数据的名称,方法的返回值类型,表示数据值的类型

比如,截图中的定义两个方法定义表示该注解包含两个数据两个数据的名字分别叫做maxAgeminAge它们的返回值都为int类型的,就说明年龄上下限的取值类型是int类型。

给注解中的数据赋值有两种方式:

使用注解时,给每个数据赋值定义时给每个注解默认值,则使用时没被赋值的数据就用默认值。但是注意引用类型的数据,其默认值不能取null!!!使用注解时,若注解的名字是value,且只有名为value的数据需要赋值,可简写。 3.注解的使用

注意,定义某种类型的注解,实际上也就是定义了某种类型的额外信息的“标准形式”。

在使用每个具体注解的时候,必须保证注解中的每个数据不能有不确定的值!!

现在,注解的定义和使用我们就讲完了,紧接着我们可以来创建一个Student对象,把其年龄值初始化为1000,看是否可以将该对象创建成功?

发现还是成功了(注解没效果),why?

4.注解处理器

注解的本质是什么?
用来表达代码之外的额外信息,至于这些信息究竟用来干什么,与注解本身是没有关系的。

注解处理器:利用反射等技术获取额外注解信息,完成一些特殊的功能。

下面我们利用注解,结合我们自定义的注解处理器,实现如下需求:
定义一个Student类,包含name和age两个成员
name中包含的字符个数不得超过指定值(具体的约束条件信息-> 注解)
age必须在指定范围内(具体的约束条件信息-> 注解)
name和age都满足条件才能创建Student对象,否则抛出异常。(该效果由注解处理器来实现)

5.元注解

注解的保存级别

SOURCE:注解将被编译器丢弃(class文件中没有)CLASS:注解在class文件中可用,但会被JVM丢弃(内存没有)RUNTIME:JVM在运行时,也会保留注解信息

注解默认情况下的保留级别是CLASS(运行时已经没了)

定义自定义注解时,可使用元注解,来声明自定义注解的一些特殊属性
Java中提供了4种元注解,我们最常用的是其中前2个
1.@Target 该注解用来声明和限定注解使用的地方
ElementType取值

TYPE:可以作用于类上METHOD:可以作用于方法上FIELD:可以作用于成员变量上

2.@Rentention 该注解用来声明注解的保留级别
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
3.@Documented:描述注解是否被抽取到api文档
4.@Inherited:描述注解是否被子类继承

6.注解的使用场景

1.在配置文件中

优点:可配置,不用改源码缺点:不直观,开发效率低

2.注解中

优点:直观开发效率高缺点:硬编码,修改之后需要重新编译运行

3.注解的应用场合

JunitServletSpring

?????????
在程序使用(解析)注解:获取注解中定义的属性值
1. 获取注解定义的位置的对象 (Class,Method,Field)
2. 获取指定的注解
* getAnnotation(Class)
//其实就是在内存中生成了一个该注解接口的子类实现对象

public class ProImpl implements Pro{ public String className(){ return "cn.itcast.annotation.Demo1"; } public String methodName(){ return "show"; } } 调用注解中的抽象方法获取配置的属性值
Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。