注解与注释
注释:
单行注释: //
多行: /* */
文档注释:/** */
作用: 传递额外信息, 给程序员看 , 不参与编译
// 年龄大于18 小于25 // [18,25] // 18<= 年龄<=25 void judgeAge(){ //xxx }
什么是注解
Annotation其实是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理
注解的作用
通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充信息
Annotation就像修饰符一样被使用,可用于修类、构造器、方法、成员变量、参数...,这些信息被存储在Annotation的“属性名=属性值”对中
注解 VS 注释
-
相同点
-
都是用来传递额外信息的
-
-
不同点
-
注解可以参与编译,注释不行
-
注解有使用范围,注释没有(想咋写咋写)
-
注释作为一种数据类型,跟class interface具有同等地位
-
自定义注解
语法
权限修饰符 @interface 注解名{ // 注解体 属性类型 属性名(); 属性类型 属性名(); 属性类型 属性名(); ..... } 举例 public @interface MyAnno { // 定义注解体 // 属性类型 属性名(); } 属性类型的范围: java基本数据类型 String类型 Class类型 枚举类型 注解类型 以及以上类型的数组形式
注意:
注解不能继承
package com._26_annotation._02_define;
/**
* 属性类型的范围:
* java基本数据类型
* String类型
* Class类型
* 枚举类型
* 注解类型
* 以及以上类型的数组形式
* @param null
* @return
* @author zxcsjf
* @since 2022/07/02 21:24:44
*/
public @interface MyAnno2 {
// 属性类型 属性名();
int age();
double price();
float salary();
String name();
String[] names();
Class c();
MyAnno3 ANNO_3();
}
@interface MyAnno3 {
}
// // 注解不能继承
// @interface MyAnno4 extends Object {
//
// }
注解的使用(重点)
对比类对象
-
实例化对象 通过构造方法赋值
-
如果没有赋值,有默认值
注解使用:
-
实例化对象, 不是通过new,而是通过 属性名 = 属性值
使用 的时候 给每个属性完成赋值 @注解名(属性名1=value,属性名2=value,....)
注意:
-
每个属性都要赋值
-
如果有默认值,可以不用赋值(default)
-
如果只有1个属性,并且名字叫value,可以简化赋值
-
数组方式的赋值,使用{ }
-
如果是引用类型,不能是null
package com._26_annotation._03_use;
/**
* @author zxcsjf
* @since 2022/07/02 21:26
*/
public class Demo {
@MyAnno8(names = {"瑠夏", "水原千鹤"})
@MyAnno7("女朋友")
public static void main(String[] args) {
}
@MyAnno6
@MyAnno5(name = "水原千鹤", age = 20)
private static void func() {
}
}
@interface MyAnno5 {
// 定义属性
String name();
int age();
}
@interface MyAnno6 {
// 定义属性 赋予默认值
String name() default "一之濑千鹤";
}
@interface MyAnno7 {
String value();
}
@interface MyAnno8 {
String[] names();
}
注解处理器
获取注解信息,根据信息进行处理
结合反射去使用
package _