Java基础_注解
注解
Step1——>检视学习:浏览目录或Wiki
学习内容:注解,特殊语法元数据
作用:通过反射获取标注内容,被嵌入进字节码中
主题框架:
Step2——>知行学习:掌握+练习
知识点笔记
练习
Step3——>主题学习:深入理解运用
总结输出
Q4:
- 这个知识点主要讲了什么
- 知识点的重点是什么
- 理解what、How、Why了吗
- 简要复述你学到了什么
知识点笔记:
Overview
注解:Annotations,元数据(描述资料的资料,如标题、作者是一种元数据)的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的造作没有直接影响。
用途:
- 为编译器提供信息:检测错误或抑制警告
- 编译时和部署时处理:处理注解信息生成代码、XML文件
- 运行时处理:在运行时检查
注解基础
注解格式
-
最简单形式中:@Entity
-
@向编译器指示后面内容是注解
-
注解可以包括elements元素,元素可以命名且有值
@Author(name="Ben Frank",date="3/27/2003")
class MyClass(){...}
-
如果只有一个名为value的元素,可以省略该名称
-
没有元素时,可以省略括号,可以在同一声明中使用多个注解
-
注解具有相同的类型,称为重复注解
可以使用注解的位置
-
可以应用于声明:类、字段、方法和其他程序元素的声明
-
Java8开始也可用于类型注解type annotation
- 这个知识点主要讲了什么
什么是注解,注解使用位置、注解的格式
- 知识点的重点是什么
注解使用位置、注解的格式
- 理解what、How、Why了吗
编译时检查错误、编译时生成代码、运行时检查
- 简要复述你学到了什么
注解一种修饰代码的代码,可以在编译和运行时检查代码、生成代码,可于类、方法、字段、类型位置 进行修饰
声明一个注解类型
定义注解类型,注解类型是接口的一种形式
@interface ClassPreamble{
String author();
String date();
}
定义注解类型后,可以使用该类型的注解并填入值
@ClassPreamble(author="John Doe",date="3/17/2002")
- 这个知识点主要讲了什么
如何自定义注解以及注解的使用
- 知识点的重点是什么
- 理解what、How、Why了吗
- 简要复述你学到了什么
注解的定义
@Interface ClassDemo{
String name;
int id;
}
注解的使用
@ClassDemo(name="Jack",id=5)
预定义的注解类型
Java语言使用的注解类型
-
@Deprecated注解表示标记的元素deprecated弃用且不应再使用
-
@Override 注解通知编译器该元素是覆盖超类中声明的元素
-
@SuppressWarnings告知编译器抑制生成的特定警告
-
@SafeVarargs 断言(判断为真继续,为假停止)不会对varargs参数执行潜在的不安全操作
-
@FunctionalInterface表明类型声明为一个函数式接口
适用于其他注解的注解
适用于其他注解的注解称为元注解
- @Retention注解指定标记注解的存储方式
- RetentionPolicy.SOURCE 注解保留在源码级别并被编译器忽略
- RetentionPolicy.CLASS 注解由编译器保留,但Java虚拟机会忽略
- RetentionPolicy.RUNTIME 注解由JVM保留,运行时环境可以使用它
- @Documented 使用Javadoc工具记录这些元素
- @Target 注解标记另一个注解
- ElementType.ANNOTATION_TYPE 可以应用于注解类型
- ElementType.CONSTRUCTOR 可以应用于构造函数
- 其他
- @Inherited 注解表示注解类型可以从超类继承
- @Repeatable 注解表明标记的注解可以多次应用于同一声明或类型使用
主要讲解了关于Java内置的一些注解和元注解
类型注解和可插入类系统
从Java8开始注解可以用于任何类型使用,确保更强的类型检查
作用:在需要的时候在特定的地方添加检查
implements字句
class UnmodifiableList<T> implement @Readonly List<@Readonly T>{...}
类型转换
myString = (@NonNull String)str;
主要讲述了可以通过注解保证开发过程中的类型要求
重复注解
从Java8 开始重复注解可以将相同的注解用于声明或类型用途
设置计时器,第一次使用在指定月份的最后一天,第二次使用制定星期五晚上11点
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri",hour="23")
public void doPeriodicCleanup(){...}
为使编译器执行此操作,代码需要两个声明
第一步:声明可重复的注解类型
注解类型必须使用@Repeatable元注解进行标记
import java.lang.annotation.Repeatable;
@Repeatable(Schedules.class)
public @interface Schedule{
String dayOfMonth() default "first";
String dayOfWeek() default"Mon";
int hour() default 12;
}
第二步:声明容器注解类型
容器注解类型必须具有带有数组类型的value元素,数组类型的组件类型必须是可重复的注解类型
public @interface Schedules{
Schedule[] value();
}
获取注解
反射API中有几种可以获取注解的方法
interface AnnotatedElement
该界面允许反射读取注解
设计注意事项
设计注解时,必须考虑该类型注解的cardinality(基数)
小结
- 注解是修饰类、构造器、方法、字段、类型等的一种元数据(修饰数据的数据)
- 它可以用来
- 为编译器提供信息:检测错误或抑制警告
- 编译时和部署时处理:处理注解信息以生成代码、XML文件等(如mybatis注解开发,利用反射获取方法,方法调用getAnnotation获取注解中sql语句)
- 运行时处理:运行时检查
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了