注解的分类

注解

注释: 注释给程序员看的。方便理解该行的代码意思。

注解: 注解是给程序看的

注解的分类

(1)预定义注解

(2)自定义注解

(3)元注

预定义注解

JDK中自带的一些注解,JVM可以解析这些注解。

1. @Override: 表示方法重写的注解,如果使用该注解那么必须符合重写的规则。
2. @Deprecated: 表示过时的注解,使用该注解表示该方法已经过时了。
3. @SuppressWarnings:表示忽略警告的注解。使用该注解可以去除警告。
4. @FunctionInterface: 表示函数式接口。

package com.am.demo07;
@SuppressWarnings(value = "all")//忽略所有的警告
public class Test {
    public static void main(String[] args) {
         int a=15;
    }
}
@FunctionalInterface //函数式接口 表示该接口中有且仅有一个抽象方法。
interface  USB{
    public void fun();
    default  void show(){
        
    }

package com.am.demo07;

import java.util.Date;

/**
 * @program: java高级-泛型
 * @description:
 * @author: 阿木
 * @create: 2021-12-20 16:14
 **/
public class Test07 {
    public static void main(String[] args) {
        Date date = new Date();
        String s = date.toLocaleString();//把时间进行格式
        System.out.println(s);
        Info i=new Info();
        i.show();
    }
}

class Info {
    private String name;


    @Deprecated //表示该方法为过时方法,如果调用该方法会出现删除线
    public void show(){
        System.out.println("~~~~~~~~~~~~~~~~");
    }



    @Override //表示方法重写的注解。使用该注解必须保证符合重写的规则
    public String toString() {
        return "Info{" +
                "name='" + name + '\'' +
                '}';
    }
}

自定义注解

如果没有人解析该注解,那么该注解没有任何意义【反射来解析该注解使其有意义】。

@Controller 那是因为Spring框架解析了该注解。

@Override: 因为JVM解析该注解。

格式:

public @interface 注解名{
   注解的属性
}

public class Test08 {
}
//自定义注解
@interface MyAnnotation{

}
//使用自定义的注解
@MyAnnotation
class Info{
     @MyAnnotation
     private String name;

     @MyAnnotation
     public void show(){

     }
}

 

元注解

 定义在注解上的注解称为元注解。

@Target: 该注解使用的位置。
    //作用在类上
    TYPE,

    //作用在属性上
    FIELD,

    //作用在方法上
    METHOD,

    //作用在方法参数上。
    PARAMETER,

    //作用在构造方法上
    CONSTRUCTOR,

    //作用在局部变量上
    LOCAL_VARIABLE,

    //作用在注解上 
    ANNOTATION_TYPE,

    //作用在包上
    PACKAGE,

    //类参数
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
@Retention: 作用什么时候生效。 默认为SOURCE
    SOURCE:源码上生效
    ClASS:字节码上生效
    RUNTIME:运行时生效----几乎都使用该值。
@Documented: 表示该注解生成API文档时是否存在。
@Inherited:  该注解是否允许被子类继承。

自定义注解时可以添加注解属性。

格式:

数据类型 属性名() default 默认值。

注意:数据类型可以是 基本数据类型 字符串 数组 枚举 注解。  

@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    int value(); //属性名为value 值为int类型
    String  name();//属性名为name 类型为String
    double [] scores();//属性名为scores 类型为数组
    My my();//自定义注解
}
@interface  My{

}

使用自定义的注解  

@MyAnnotation(value = 18,name="刘壮",scores = {99,88,77},my=@My)
class Teacher{

}

思考为什么 @RequestMaping时并没有指定method 他也不会报错。那是因为定义method属性时设置了默认值。使用default来设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A_M阿木

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

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

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

打赏作者

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

抵扣说明:

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

余额充值