java进阶(42)--注解
文档目录:
---------------------------------------分割线:正文--------------------------------------------------------
1、注解即注释:Annotation
2、引用数据类型,编译之后包生成xxx.class文件
3、自定义注解:语法[修饰符列表]@interface 注解类型名{}
1、注解使用时语法格式:@注解类型名
2、注解可以出现在类、属性、方法、变量等几乎任意类型上
1、@Deprecated注解
表示注解的元素已过时,有更好的解决方案
2、@Override注解
只能注解方法,给编译器参考的,如果不是重写父类方法时编译器会报错
1 @Override
2 public String toString() {
3 return "AnnotationTest01{" +
4 "no=" + no +
5 '}';
6 }
注解注解的注解
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.SOURCE)
3 public @interface Override {
4 }
1、@Target注解
用来标注的注解可以出现在哪些位置上
2、@Retention注解
表示该注解被保存的位置
1、如果一个注解中有属性,那必须给属性赋值,除非属性有defalut默认值
注解:
package com.bk.java.Test42;
public @interface MyAnnotation {
String name();
int no() default 1;
}
测试程序:
1 package com.bk.java.Test42;
2
3 public class AnnotationTest01 {
4 @MyAnnotation(name="test01")
5 private int no;
6 public static void m1(){
7 int i=100;
8 }
9 public AnnotationTest01(){
10 }
11
12 public String toString() {
13 return "AnnotationTest01{" +
14 "no=" + no +
15 '}';
16 }
17 }
2、如果属性值是value且只有一个属性时,使用时可以省略。
注解:
package com.bk.java.Test42;
public @interface MyAnnotation {
String value();
}
测试程序:
1 package com.bk.java.Test42;
2
3 public class AnnotationTest01 {
4 @MyAnnotation("testvalue01")
5 private int no;
6 @MyAnnotation(value = "testvalue02")
7 public static void m1(){
8 int i=100;
9 }
10 public AnnotationTest01(){
11 }
12
13 }
3、注解的属性类型为数组
注解中可以使用的类型为:
byte、short、int、long、float、double、boolean、char、String、Class以及每一种的数组形式
注解:
package com.bk.java.Test42;
public @interface MyAnnotation {
String value();
}
测试程序:当数组只有一个类型时,大括号可以省略
1 package com.bk.java.Test42;
2
3 public class OtherAnnotationTest01 {
4 @OtherAnnotation(age = 10,email = {"zhang@123.com","li@qq.com"})
5 public void doSome(){}
6 @OtherAnnotation(age=25,email = "wang@wangyi.com")
7 public void doOther(){}
8 }
注解:
package com.bk.java.Test42;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation02 {
String Value() default "北京";
}
注解测试:
package com.bk.java.Test42;
@MyAnnotation02
public class MyAnnotationTest02 {
int i;
public MyAnnotationTest02(){
}
@MyAnnotation02
public void doSome(){
int i;
}
}
测试反射注解:
1 package com.bk.java.Test42;
2
3 public class ReflectAnnotationTest02 {
4 public static void main(String[] args) throws ClassNotFoundException {
5 //获取类
6 Class c= Class.forName("com.bk.java.Test42.MyAnnotationTest02");
7 //判断是否此类是否有注解对象
8 if(c.isAnnotationPresent(MyAnnotation02.class)){
9 MyAnnotation02 myAnnotation02=(MyAnnotation02)c.getAnnotation(MyAnnotation02.class);
10 System.out.println("类上的注解对象"+myAnnotation02);
11 //获取注解对象的属性
12 String value=myAnnotation02.Value();
13 System.out.println(value);
14 }
15 }
16 }
查看代码运行结果:
类上的注解对象@com.bk.java.Test42.MyAnnotation02(Value=北京)
北京
注解:
1 package com.bk.java.Test42;
2
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7
8 @Target(ElementType.METHOD)
9 @Retention(RetentionPolicy.RUNTIME)
10 public @interface MyAnnotation03 {
11 String username();
12 String password();
13 }
注解测试:
1 package com.bk.java.Test42;
2
3 import java.lang.reflect.Method;
4
5 public class MyAnnotationTest03 {
6 @MyAnnotation03(username="admin",password = "123")
7 public void doSome(){};
8
9 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
10 Class c=Class.forName("com.bk.java.Test42.MyAnnotationTest03");
11 //获取doSome方法
12 Method doSomeMethod=c.getDeclaredMethod("doSome");
13 //判断方法上是否有这个注解
14 if(doSomeMethod.isAnnotationPresent(MyAnnotation03.class)){
15 MyAnnotation03 myAnnotation03=doSomeMethod.getAnnotation(MyAnnotation03.class);
16 System.out.println(myAnnotation03.username());
17 System.out.println(myAnnotation03.password());
18 }
19 }
20 }
查看运行结果:
admin
123
分类:
java进阶
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了