注解的一些简单理解,也不知道具体学了个啥,反正学着玩
注解
注释:用文字描述程序,给程序员看的
##### 概念:
给计算机看的程序说明
这是1.5之后的新特性
使用注解的时候:@注解名称
#### 注解作用:
* 编写文档:通过代码里标识的注解生成文档,【例:生成文档doc文档】
jdk文档就是这样生成的
* 代码分析:通过代码里标识的注解对代码进行分析【例:使用反射】
* 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【例:Override】
比如重写toSting方法
注解的类型
## 1,JDK中预定义的一些注解
### @Override
检测被标注的方法是否是继承父类(接口)的
@Deprecated
该注解标注的内容,表示已过时
@SuppressWarnings
压制警告
一般传递参数"all",@SuppressWarnings("all"); 并且一般是放在类名上
2,自定义的注解
格式:
元注解
public @interface 注解名{
属性列表
}
通过把上面那排代码使用javac命令编译,再通过javap命令反编译,可得到一行代码:
public interface 注解名 extends java.lang.annotation.Annotation{}
所以注解的本质是:
本质:注解本质上就是一个接口,该接口默认继承Annotattion接口
属性: 接口可以定义的成员方法
要求:
1,属性的返回值类型:
* 基本数据类型
* String
* 枚举
* 注解
* 以上类型的数组
* 无返回值和其他类型都是不可以的!!!
2,定义了属性,在使用的时候需要给属性赋值
* 如果定义属性时,使用default关键字给属性默认初始化,在使用时可以不给属性赋值
* 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值
* 数组赋值时,值使用{}包裹,如果数组中只有一个值,大括号可以省略
#### 元注解:用于描述注解的注解
-
@Target:描述注解能够作用的位置
@Target(value={ElementType.TYPE})表示该注解只能作用于类上
@Target(value={ElementType.METHOD})表示该注解只能作用于方法
@Target(value={ElementType.FIELD})表示该注解只能作用于成员变量 -
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME):表示被描述的注解会被保留到class字节码文件中,并被JVM读取到
-
@Documented:描述注解是否被抽取道api文档中
-
@Inherited:描述注解是否被子类继承
-
3,在程序中使用注解
获取在程序中 获取定义的属性值
1,获取注解定义位置的对象(class,Method,Field)
2,获取指定的注解
getAnnotation(class)
3,调用注解中的抽象方法获取配置的属性值
判断这个方法上是否有某个注解:
Mehrod类型.isAnnotationPresent(注解名.class)——返回值是布尔型
小结:
1,大多数时候,我们会使用注解,而不是自定义注解
2,注解给谁用?
-
编译器
-
给解析程序用
3,注解不是程序的一部分
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix