注解(Annotation)

本文详细介绍了Java注解的定义、使用方式以及其在类、属性、方法等位置的应用。讲解了JDK自带的Override、Deprecated和SuppressWarnings注解,以及元注解如Retention和Target的作用。同时,阐述了如何在注解中定义属性,包括默认值和数组类型的属性,并展示了自定义注解的使用示例。最后,提到了注解在程序不同阶段的保留策略和在反射中的使用。
摘要由CSDN通过智能技术生成

概述

1.注解是一种引用数据类型

2.语法格式:(修饰符列表) @interface 注解类型名

public @interface MyAnnoction {
}

3.注解怎么使用?用在哪?

注解使用时的语法结构:@注解类型名

注解用在:类上,属性上,方法上等。注解还可以出现在注解类型上。

@MyAnnoction
public @interface otherannocation {
}
@MyAnnoction
public class AnnocationTest {
    @MyAnnoction
    private int no;
    @MyAnnoction
    public AnnocationTest() {
    }
    @MyAnnoction
    public static void m1(){
        @MyAnnoction
        int i = 100;
    }
}
@MyAnnoction
interface Myinterface{

}
@MyAnnoction
enum season{
    Spring,sunmmer,autumn,winter
}

4.jdk自带注解

Override:注解的方法必须是子类重写的父类方法,否则报错。而且Override只在编译阶段起作用,运行阶段没用。

Deprecated:过时。

SuppressWarnings:

元注解

定义:注解的注解叫做元注解

常见的元注解

Target:这个注解用来标注使用了这个元注解的注解可以出现在哪。

Retention: 这个注解用来标注“被标注的注解”最终保存在哪

@Retention(RetentionPolicy.RUNTIME)//表示该注解被保存在class文件中,而且可以被反射机制读取
@Retention(RetentionPolicy.CLASS)//表示该注解只被保存在class文件中
@Retention(RetentionPolicy.SOURCE)//表示该注解只被保留在java源文件中

在注解中定义属性

自定义注解

public @interface MyAnnoction {
    //我们可以在自定义注解中定义属性,虽然看着像一个方法,其实是一个属性
    //如果一个注解中有属性,当我们使用注解时那么我们必须要给属性赋值,如果不赋值,则报错
    String name();
    int no() default 10;//默认属性值
    int value();//如果属性名是value时候,在使用属性的时候,不需要指定属性名。但是只能是只有一个属性的时候才能这样使用。
}

使用自定义注解

@MyAnnoction
public class AnnocationTest {
    @MyAnnoction(name="zhangsan")//注解有属性,我们必须给注解赋值,如果不赋值就会报错
    @MYAnnocation(100)//如果属性名是value时候,在使用属性的时候,不需要指定属性名。但是只能是只有一个属性的时候才能这样使用。
    public void dosome(){
    }
}

当属性是数组

@Documented
@Retention(RetentionPolicy.RUNTIME)//属性名省略,因为是value
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}
public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,//出现在类上

    /** Field declaration (includes enum constants) */
    FIELD,//出现在字段上

    /** Method declaration */
    METHOD,//出现在方法上

    /** Formal parameter declaration */
    PARAMETER,//出现在参数上

    /** Constructor declaration */
    CONSTRUCTOR,//出现在构造方法上

    /** Local variable declaration */
    LOCAL_VARIABLE,//出现在局部变量上

    /** Annotation type declaration */
    ANNOTATION_TYPE,//出现在注解类型上

    /** Package declaration */
    PACKAGE,//出现在包上

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值