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语句)
    • 运行时处理:运行时检查
posted @   Albert-ZZD  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示