Java笔记-注解

注解(Annotation):

注解是对程序的注释信息。
一种引用数据类型,编译后的文件是xx.class文件
写法:
修饰符列表 @interface 注解类型名{
}

注解使用:

1.语法格式:@注解类型名
2.注解可以出现在类上,属性上,方法上,变量上等,也可以出现在注解上。默认情况下,注解可以出现在任意位置。

JDK自带注解:

@Override:

标识性注解,给编译器作参考的,表示方法重写了。
源码:
public @interface Override {
}
只能出现在方法上,是给编译器参考的,和运行阶段无关,编译器会检查带有这个注解的方法是否为重写父类的方法。

@Documented:

表示当前方法、类、属性等已过时,有更好的解决方案。

元注解:

用来标注“注解类型”的注解,称为元注解。
@注解1
public @interface m1 {
}
此时注解1称为元注解。
常见的元注解:

1.@Target :

这个注解用来标注,被标注的注解可以出现在哪些地方上。
@Target(ElementType.METHOD):表示被标注的注解只能出现在方法上。
@Target(value={CONSTRUCTOR,字段,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE}):表示被标注的注解能出现在构造方法上、字段上、局部变量上等。

2.@Retention:

这个注解用来标注,被标注的注解最终保存的位置。
@Retention(RetentionPolicy.SOURCE):表示被标注的注解只被保留在java源文件中。
@Retention(RetentionPolicy.CLASS):表示被标注的注解只被保留在class文件中。
@Retention(RetentionPolicy.RUNTIME):表示被标注的注解只被保留在class文件中,并且可以被反射机制所读取。

注解中的属性:

写法:类型 属性名();
在使用注解时,必须在注解后面跟上(属性名=属性值,属性名=属性值…)
例如:
public @interface m1{
String name();
}
@m1(name=“张三”)
public void dosome(){
}
可以在属性后面用default加默认值。
例如:
int age() default 25;//属性指定默认值

在注解中,如果属性的名字为“value”,可以忽略其属性名来赋值。
例如:

public @interface m1(){
String value();
}

可以:
@m1(value=“hello”)
public void dosome(){
}
也可以:
@m1(“hello”)
public void dosome(){
}

属性可以是基本数据类型,String,Class,枚举及他们的数组。

当属性是数组时,在写注解时需要用大括号来写
例如

public @interface m1(){
String[] email();
}
@m1(email={“zhangsan@123.com”, “lisi@123.com”})
public void dosome(){
}
如果数组中只有一个元素,大括号可以省略。
@m1(email=“zhangsan@123.com”)
public void dosome(){
}

枚举的写法类似以上。

反射注解:

  • 通过 类名.isAnnotationPresent(注解名.class),返回布尔类型来判断某个类是否有对应名字的注解。也可以是方法.isAnnotationPresent等其他的。

  • 通过类名.getAnnotation(注解名.class)去获取这个注解。

  • 获取注解当中的属性:直接用 注解.属性名();就可以得到。

注意:反射注解只能反射RUNTIME类型的注解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值