Java注解系列

注解

什么是注解?

注解是可以被程序(比如:编译器等)解读的,和注释的区别就是注释不可以被程序解读
内置注解:
@SuppressWarnings: 用来抑制编译时的警告信息,(如果方法未使用方法名将会变为灰色,这就是警告)
@Deprecated:不推荐使用,通常是因为很危险或者存在更好的方式
@Override:表示一个方法声明打算重写父类的一个方法

注解在哪使用?

Annotation可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息
我们可以通过反射机制编程实现对这些元数据的访问

内置注解代码测试

@SuppressWarnings("all")
public class Test01 {
    //Override 重写的注解
    @Override
    public String toString() {
        return super.toString();
    }

    //Deprecated 不推荐使用,但是可以使用或者存在更好的方式
    @Deprecated
    public static void test(){
        System.out.println("过时;");
    }
    //SuppressWarnings 用来抑制编译时的警告信息,(如果方法未使用方法名将会变为灰色,这就是警告)
    @SuppressWarnings("all")
    public void test02(){

    }

    public static void main(String[] args) {
        test();
        List list = new ArrayList();
    }

}

元注解

元注解作用

负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明

元注解的类型

这些类型包括:@Target@Retention@Document@Inherited
(重要)@Target:用于描述注解的使用范围(即用来描述注解可以用在什么地方
		一般用于TYPE(类),METHOD(方法)上面
(重要)@Retention:表示要在什么级别保存该注释信息,用于描述注解的生命周期
		SOURCE<CLASS<RUNTIME(一般使用RUNTIME,因为级别最高,代表在源码,在class字节码文件中都有用)
@Document:说明该注解将会被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解

自定义注解

如何自定义注解?

使用@interface声明自定义注解,自动继承了java.lang.annotation.Annotation接口
分析:
@interface用来声明一个注解,格式:public @interface 注解名{定义内容}
其中的每一个方法实际上就是声明了一个配置参数
方法的名称就是参数的名称
返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
可以通过default来声明默认参数值
如果只有一个参数成员,一般参数名为value
注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值

代码测试

//自定义注解
@MyAnnotation //定义在类上
public class Test02 {
    @MyAnnotation(name="yuan")//定义在方法上
    public void test(){ }

    @MyAnotation2({"你","我"})//该注解只有一个参数value,可以不需要在注解中声明参数名
    public void test2(){ }
}

@Target({ElementType.TYPE,ElementType.METHOD})//用来描述注解可以用在什么地方
@Retention(RetentionPolicy.RUNTIME)//表示要在什么级别保存该注释信息,用于描述注解的生命周期
@Documented//说明该注解将会被包含在javadoc中
@Inherited//说明子类可以继承父类中的该注解
@interface MyAnnotation{
    //注解参数:参数类型+参数名+();
    String name() default "";
    int age() default 0;
    int id() default -1;//如果默认值为-1代表不存在,如同indexof,如果找不到就返回-1
    String[]schools() default {"新余学院","清华大学"};
}

//如果自定义注解只有一个参数,参数一般用value命名
@Target({ElementType.TYPE,ElementType.METHOD})//用来描述注解可以用在什么地方
@Retention(RetentionPolicy.RUNTIME)//表示要在什么级别保存该注释信息,用于描述注解的生命周期
@interface MyAnotation2{
    String[] value() default {};//只有一个参数value,程序默认参数为value,不需要声明
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yuan_boss

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

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

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

打赏作者

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

抵扣说明:

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

余额充值