java进阶学习——9 注解

16 篇文章 0 订阅
11 篇文章 0 订阅
文章介绍了Java中的注解,包括内置的@Deprecated、@Override等,解释了注解的使用位置、定义属性以及如何通过反射机制读取注解信息。还讨论了注解在开发中的重要性,如作为代码标记和重写检查等。
摘要由CSDN通过智能技术生成


大数据学习路线,从零开始学大数据(点击跳转,学习不迷路)

Java最详细教程 (点击跳转,学习不迷路)

九、注解(Annotation)

  1. 注解,也叫注释类型,英文单词是:Annotation

  2. 注解Annotation是一种引用数据类型,编译之后也是生成xxx.class文件。

  3. 怎么自定义注释呢?语法格式?
    [修饰符列表] @ interface 注解类型名{

     	}
    
  4. 注解怎么使用,用在什么地方?
    第一:注解使用时的语法格式是:
    @注解类型名
    第二:注解可以出现在类上、属性上、方法上、变量上等…
    注解还可以出现在注解类型上。

1 jdk内置的注解:

java.lang包下的注释类型:

@Deprecated:注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它是危险的,或者因为存在更好的替代方法。 编译器在不被弃用的代码中使用或覆盖不推荐使用的程序元素时发出警告。
这个注解表示:注解标注的元素已经过时

@ Override :表示一个方法声明打算重写超类中的另一个方法声明。

@ SuppressWarnings :表示在注释元素(以及注释元素中包含的所有程序元素)中应该抑制命名的编译器警告。 (不需要掌握)

1.1.Override(检查是否重写父类方法)

  1. Override这个注解只能注解方法
  2. Override :表示一个方法声明打算重写超类中的另一个方法声明。
  3. Override这个注解是给编译器参考的,和运行阶段没有关系。
  4. 凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。

元注解

  • 什么是元注解?

用来标注”注解类型“的”注解“,称为元注解

  • 常见的元注解有哪些?

Target
Retention

1. 2 Target注解:

这是一个元注解,用来标注”注解类型“的”注解“
这个Target注解用来”被标注的注解“可以出现在哪些位置上。
@Target(ElementType.METHOD):表示”被标注的注解“只能出现在方法上
@Target(Element.Type):表示”被标注的注解“只能出现在类上
@Target(Element.Type,Element.METHOD):表示”被标注的注解“只能出现在方法上

1.3 Retention注解:

这是一个元注解,用来标注”注解类型“的”注解“
这是个Rentention注解用来标注”被注解的注解“最终保存在哪里。
@Retention(RetentionPlicy.SOURCE): 表示该注解只被保留在java源文件中。
@Retention(RetentionPolicy.CLASS): 表示该注解被保存在class文件中。
@Retention(RetentionPolicy.RUNTIME): 表示该注解被保存在class文件中,并且可以被反射机制所读取。

1.4 Deprecated注解

@Deprecated:注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它是危险的,或者因为存在更好的替代方法。 编译器在不被弃用的代码中使用或覆盖不推荐使用的程序元素时发出警告。
这个注解表示:注解标注的元素已经过时

2. 注解中定义属性

在注解中定义属性
注解当中可以定义的属性的类型可以是:byte、short、int、long、float、double、char、String、Class 枚举类型
以及以上每一种的数组形式。

public @interface MyAnnotation {
    String name();

    int age();

//    设定默认值
    int num() default 0;
    
}

使用注解:

public class AnnotationTest01 {

    @MyAnnotation
//    报错的原因:如果一个注解中由属性,那么必须给属性赋值(除非该属性由默认值)
    private  int no;

//  @MyAnnotation(属性名 = 属性值,属性名 = 属性值)
    @MyAnnotation(name = "hai",age = 23)
    public void doSome(){
    }

3. 反射注解

通过反射机制来获取注解

注解:
在这里插入图片描述

类:

在这里插入图片描述

在这里插入图片描述

通过反射机制获取注解的值

注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Myannotation01 {
    String username();

    String passwords();

}

类:


public class Myanotation01Text {
    @Myannotation01(username = "哈哈哈", passwords = "123")
    public void dosome() {
    }
    public static void main(String[] args) throws Exception {
//        获取Myanotation01Text的dosome方法上面的注解信息
        Class c = Class.forName("Myanotation01Text");
//        获取dosome方法
        Method dosomemethod = c.getDeclaredMethod("dosome");
//        判断方法上是否存在注解
        if (dosomemethod.isAnnotationPresent(Myannotation01.class)) {
            Myannotation01 myannotation01 = dosomemethod.getAnnotation(Myannotation01.class);
            System.out.println(myannotation01.username());
            System.out.println(myannotation01.passwords());
        }
    }
}

4. 注解在开发当中的作用

注解在程序当中等同于一种标记

需求:

在这里插入图片描述
定义一个id注解:

在这里插入图片描述

User类:
在这里插入图片描述
测试类:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海码儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值