注解(基础知识点)

一,首先什么是注解

简而言之,用来对程序起约束作用,以及给JVM(Java虚拟机)用的,相当于一段程序。

对于注解,我们肯定是见过的,只是你在用它但是你不知道它是注解的意思,比如:子类继承父类,就要重写父类的抽象方法,这个“重写” @Override 就是一个注解的意思

二,自定义注解

(1)创建自定义注解

我们在Java中创建一个类时,命名完之后那边是可以选择类型,如下图所示:

public @interface MyAnnotation {
    
}

@这个就是代表注解的意思,我们常用的注解还有很多

(2)给注解设置参数

注意:加入你的注解只有一个参数,我们建议这个参数名称就叫value,那么使用注解的时候,给参数赋值时可以不写参数名称

public @interface MyAnnotation {
//参数类型只有一个,写value(),在使用时就可以不用写参数名称
    String value();
//加入上一行你定义的时String name();在使用时你就要写参数名称
    int age() default 18;//这个参数有默认值
}

public class Main{
    public static void main(String[] args) {
        //使用注解,定义的是value
        @MyAnnotation("zhangsan")
        //如果是name(),那就是@MyAnnotation(name = "zhangsan"),要写参数名称
        //定义一个speak方法
        public void speak(){
            System.out.prinln("hello~");
        }
    }
}

三,元注解

(1)定义

元注解是注解的注解,这句话可能有点抽象,就是一种可以应用到其他注解上的注解。元注解可以用来定义注解的某些特性,如作用位置,生命周期等.....

(2)常见的元注解

@Target --- 用来表示注解的作用范围(类,方法,属性...)

@Target(ElementType.FIELD) //表示只能给属性上注解
@Target(ElementType.TYPE) //表示只能给类上注解
@Target(ElementType.METHOD) //表示只能给方法上注解

@Retention --- 用来表示注解的生命周期(编译阶段,编码阶段,运行阶段)

@Retention(RetentionPolicy.RUNTIME) //表示注解在运行时仍然保留,可以通过反射机制读取注解的信息。
@Retention(RetentionPolicy.CLASS) //表示注解在编译时被保留,但JVM在运行时不会保留它。
@Retention(RetentionPolicy.SOURCE) //表示注解仅在源代码中保留,编译器会忽略它。CLASS表示注解在编译时被保留,但JVM在运行时不会保留它

@Document  --- 生成注释文档

@Inherited --- 如果加上这个注解,代表这个注解能被继承

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//自定义注解
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
//元注解,TYPE表示只能加在类上面,FIELD加在属性上面,METHOD加载方法上面
@Retention(RetentionPolicy.RUNTIME) //注解能使用在哪个阶段(生命周期)
public @interface MyAnnotation {
    String value();
    int age() default 18;//这个参数有默认值
}

四,注解的作用

(1)生成文档:这是注解最常见的用途之一。例如,JavaDoc就是通过读取源代码中的注解来生成API文档的。
(2)代码依赖跟踪:注解可以用于减少配置文件的使用,特别是在一些框架中,如Spring。通过注解,开发者可以直接在代码中声明依赖关系,而不是在外部配置文件中进行。
(3)编译时检查:有些注解可以在编译时进行格式检查。例如,@Override注解可以用于方法声明,如果该方法并没有真正覆盖父类中的方法,编译器就会报错。
(4)运行时处理:通过注解,可以在运行时对代码进行动态处理。例如,Spring框架中的@Autowired和@Transactional注解可以在运行时自动完成相应的操作。
(5)配置信息:注解可以用于替代传统的XML配置文件,提供更简洁、更易于理解的配置方式。
(6)单元测试:在单元测试中,注解常常被用于标识测试方法和测试类,以便于测试框架识别和执行。
(7)AOP(面向切面编程):在AOP编程中,注解常被用于标识切面、通知等,以实现横切关注点的模块化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值