【JavaSE 十四】注解

十四、注解

基本内置注解

public class Txt {

    public static void main(String[] args) {
        test();
    }
    //@Override用在方法上,表示这个方法重写了父类的方法
    @Override
    public String toString() {
        return super.toString();
    }
    //@Deprecated 表示这个方法已经过期,不建议开发者使用.(将来某个版本,就有可能会取消掉)
    @Deprecated
    public static void test(){

    }

    /**
     * 1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);
     * 2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告
     * 3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
     * 4.path:在类路径、源文件路径等中有不存在的路径时的警告;
     * 5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
     * 6.finally:任何 finally 子句不能正常完成时的警告;
     * 7.rawtypes 泛型类型未指明
     * 8.unused 引用定义了,但是没有被使用
     * 9.all:关于以上所有情况的警告。
     */
    //@SuppressWarnings Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息
    @SuppressWarnings("all")
    public static void  test2(){

    }

}
//函数式接口
@FunctionalInterface
interface test3{
    public void t();
}

元注解

元注解(metadata)就是注解的注解,主要是给自定义注解用的

//@Target 表示这个注解能放在什么位置上,例@Target({METHOD,TYPE})
/**参数:
 * ElementType.TYPE:能修饰类、接口或枚举类型
 * ElementType.FIELD:能修饰成员变量
 * ElementType.METHOD:能修饰方法
 * ElementType.PARAMETER:能修饰参数
 * ElementType.CONSTRUCTOR:能修饰构造器
 * ElementType.LOCAL_VARIABLE:能修饰局部变量
 * ElementType.ANNOTATION_TYPE:能修饰注解
 * ElementType.PACKAGE:能修饰包
 */
//@Retention 表示生命周期,例@Retention(RetentionPolicy.RUNTIME)
/**
 * RetentionPolicy.SOURCE: 注解只在源代码中存在,编译成class之后,就没了。@Override 就是这种注解。
 * RetentionPolicy.CLASS: (默认值)注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。
 * RetentionPolicy.RUNTIME: 注解在运行起来之后依然存在,程序可以通过反射获取这些信息,
 */
//@Inherited 表示该注解具有继承性
//@Documented 表示在用javadoc命令生成API文档后,文档里会出现该注解说明
//@Repeatable (java1.8 新增) 使用@Repeatable之后,再配合一些其他动作,就可以在同一个地方使用多次了。

自定义注解

import java.lang.annotation.*;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;

public class Txt {

    public static void main(String[] args) {
        //通过反射,获取TestClass类的注解信息
        MyAnnotation annotation = TestClass.class.getAnnotation(MyAnnotation.class);
        int id= annotation.id();
        String name = annotation.name();
        int age = annotation.age();
        int salary = annotation.salary();
        System.out.printf("%d,%s,%d,%d",id,name,age,salary);
    }

}
//使用注解
@MyAnnotation(id = 10,name = "张三",age = 23,salary = 15000)//类似与python的关键自传参
class TestClass{

}
//自定义注解
@Target({METHOD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@interface MyAnnotation{
    //注解元素里有一个元素,可以使用value,这个再引用注解时可以省略value=
    //固参数定格式:参数类型 参数名();
    int id();//这种带括号的不是方法,是固定格式
    String name();
    int age();
    int salary() default 20000;//带默认值
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值