注解复习(java)

注解

  • 注解可以标注在 类上,属性上,方法上等。
  • 注解可以做到在不改变代码逻辑的前提下在代码中嵌入补充信息

注解:给编译器看的,或给其他程序看的,程序根据有没有这个注解来决定不同的处理方式

框架 = 反射 + 注解 + 设计模式

内置注解

在这里插入图片描述

@Deprecated
/*
 * JDK 的内置注解:@Deprecated
 * 1. 被这个注解标注的元素已过时
 * 2. 这个注解是给编译器看的,编译器看到这个注解之后会有警告提示信息
 * 3. 可以标注属性,方法,类
 */

public class Test {
    //这里有警告
    MyClass1 myClass1 = new MyClass1();
}

@Deprecated
class MyClass1 {

    // since 属性表示从哪个版本开始已过时
    // forRemoval 属性值如果是 true 表示已移除
    @Deprecated(since = "9", forRemoval = true)
    public static int num = 100;

    @Deprecated
    public void doSoms() {

    }
}

在这里插入图片描述



@Override
/*
 * JDK 的内置注解:@Override
 * 1. 给编译器看的
 * 2. 这个注解标注实例方法,被标注的方法必须是重写父类的方法
 * 3. 这个注解就是在编译阶段进行方法检查,检查这个方法是否重写了父类,如果没有重写父类报错
 * 4. 只能标注实例方法
 */

public class Test extends myclass{
    @Override
    void test() {
        
    }
}

class myclass {
    
    void test() {};
}


@SuppressWarnings【不建议使用】
/*
 * JDK 的内置注解:@SuppressWarnings
 * 1. 主要作用:抑制警告
 * 2. 该注解常见的属性值
 *     rewtypes: 抑制未使用的泛型的警告
 *     resource: 抑制未关闭资源的警告
 *     deprecation: 抑制使用了已过时资源的警告
 *     all: 抑制所有警告
 */

public class Test {
    public static void main(String[] args) throws FileNotFoundException {

        //取消没用泛型的警告
        @SuppressWarnings("rawtypes")
        List list = new ArrayList();


        //取消没关流的警告
        @SuppressWarnings("resource")
        FileInputStream in = new FileInputStream("e:\\file.txt");

    }
}


@Funcationallnterface

检查是否符合 “函数式接口” 的特征

/*
 * JDK 的内置注解:@Functionallnterface
 * 1. 这个注解专门用来标注接口的
 * 2. 被标记的接口必须是一个函数式接口,如果不是函数式接口,编译器报错
 * 3. 这个注解也是给编译器看的
 * 4. 函数式接口:接口中抽象方法有且仅有一个
*/
public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        
    }
}

@FunctionalInterface
interface T {
    void fly();
}


自定义注解

使用 @interface 来定义注解

默认情况下可以出现在类,方法,属性,构造方法,方法参数上

所有自定义注解,父类是:java.lang.annotation.Annotation

在这里插入图片描述

public @interface MyAnnotation {
    /**
     * 注解也可以定义属性,属性名后面必须添加 ()
     */

    //属性
    String drive();
    String url();
    String[] ab();
}

public class Test {
    public static void main(String[] args){
		//使用注解
        @MyAnnotation(
                drive = "aaa",
                url = "abc",
                ab = {"1,2,3"},
        )
        int i = 10;

    }
}



元注解

在这里插入图片描述



@Retention

在这里插入图片描述

@Retention(value = RetentionPolicy.SOURCE)
@Retention(value = RetentionPolicy.CLASS)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}


@Target

在这里插入图片描述



@Documented

在这里插入图片描述

被这个注解声明的注解,可以生成帮助文档



@Inherited 和 @ Repeatable

在这里插入图片描述




反射注解

在这里插入图片描述

  • field.isAnnotationPersent(AnnotationTest02.class)判断有没有这个注解
  • AnnotationTest02 an = field.getAnnotation(AnnotationTest02.class):获取注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值