网站首页 > java教程 正文
什么是注解
注解是一种能被添加到java源代码中的元数据,包、类、方法、参数都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在包、类、方法和参数上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。
注解的基本元素
声明一个注解要用到的东西
- 修饰符
- 访问修饰符必须为public,不写默认为pubic;
- 关键字
- 关键字为@interface;
- 注解名称
- 注解名称为自定义注解的名称,使用时还会用到;
- 注解类型元素
- 注解类型元素是注解中内容;
public @interface Info {
String value() default "tracy";
boolean isDelete();
}
元注解
JDK中有一些元注解,主要有@Target,@Retention,@Document,@Inherited用来修饰注解。
@Target:表明该注解可以应用的java元素类型
@Retention:表明该注解的生命周期
@Document:表明该注解标记的元素可以被Javadoc 或类似的工具文档化
@Inherited:表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Info {
String value() default "tracy";
boolean isDelete();
}
使用自定义注解
配置注解
定义一个Person类
@Data
@Builder
@Info(isDelete = true)
public class Person {
private String name;
private int age;
private boolean isDelete;
}
利用反射解析注解
public class AnnotationTest {
public static void main(String[] args) {
Person person = Person.builder().build();
Class clazz = person.getClass();
//判断person对象上是否有Info注解
if(clazz.isAnnotationPresent(Info.class)){
System.out.println("Person类上配置了Info注解!");
//获取该对象上Info类型的注解
Info infoAnno = (Info) clazz.getAnnotation(Info.class);
System.out.println("person.name :" + infoAnno.value() + ",person.isDelete:" + infoAnno.isDelete());
}else{
System.out.println("Person类上没有配置Info注解!");
}
}
}
运行结果:
Person类上配置了Info注解!
person.name :tracy,person.isDelete:true
猜你喜欢
- 2024-09-27 在Spring Boot项目中创建和使用自定义注解
- 2024-09-27 这一篇 Java 注解,写得太好了(java注解使用)
- 2024-09-27 学习廖雪峰的JAVA教程---注解(定义注解@interface)
- 2024-09-27 自定义注解妙用,一行代码搞定用户操作日志记录,你学会了吗?
- 2024-09-27 Spring Boot 整合mybatis,使用注解的方式(自动生成注解)
- 2024-09-27 面试官:实际工作中哪里用到了自定义注解?
- 2024-09-27 使用自定义注解和切面AOP实现Java程序增强
- 2024-09-27 Java-注解有什么用?该怎么用?(java 注解的作用)
- 2024-09-27 Java 17中的元注解:自定义注解的行为
- 2024-09-27 自定义注解你真会用吗?(说说自定义注解的场景及实现)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)