java里的注解

从JDK5开始,Java增加对元数据的支持,也就是 注解(Annotation) ,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。

注释 ( comment ) 用于注解说明解释程序的文字就是 注释 。

  • 注解入门
  • 内置注解
  • 自定义注解,元注解

注解入门

注解是JAVA5开始引入的新技术。注解其实就是代码里的特殊标记,它用于替代配置文件:传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。在Java技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类。

注解的作用:

  • 注解不属于代码,但它可以对程序做出解释
  • 可以被其它程序(如编译器等)读取,有助于其它程序可以进行针对性的优化。

注解的格式:

  • 注解是以“@注释名”在代码中存在的,还可以添加参数值,例如:@SuppressWarning(value=“unchecked”)

注解在哪里使用?

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

public class Test {
    // @Override 就是重写的注解,一般idea里黄色的字都是注解
    @Override
    public String toString() {
        return super.toString();
    }
}

内置注解

内置注解是系统自带的注解,一般使用较多。

  • @Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法申明。
  • @Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常十一位内它很危险或者存在更好的选择。(Deprecated: adj.弃用的)
  • @SuppressWarnings:定义在java.lang.SuppressWarrings中,用来抑制编译时的警告信息。与前两个注解,该注解必须添加一个参数才可使用,且参数都是内置时已定义好的,如"all",“unchecked”,{“all”,“unchecked”}等

元注解

除了直接使用JDK 定义好的注解,我们还可以自定义注解,在JDK 1.5中提供了4个标准的用来对注解类型进行注解的注解类,我们称之为 meta-annotation(元注解),他们分别是:
  • @Target

    • 用于解释我们的注解将用于什么范围(例如一个方法或一个域),该范围有一个明确的枚举类 ElemenetType
  • @Retention

    • 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy中。
  • @Documented

    • 表示将此注解包含在javadoc中,它表示此注解会被javadoc提取成文档。
  • @Inherited

    • 允许子类继承父类的注解

自定义注解

使用**@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface**用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

定义注解格式:
  public @interface 注解名 {定义体}

注解参数的可支持数据类型:

1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组

小技巧:当注解只有一个时,且其值名为value,则value可以省略。

package com.peng.annnotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// 自定义注解
public class Test {
    // 注解可以显示赋值, 如果没有默认值, 就必须给注解复制
    @MyAnnotation(name = "", age = 18, id = 1, schools = {})
    // 当注解只有一个时,且其值名为value,则value可以省略
    @MyAnnotation2("")
    public void test(){

    }
}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    // 注解的参数: 参数类型 + 参数名();
    String name() default "";
    int age() default 18;
    int id() default -1; //常用小技巧,设置-1表示这项找不到,表示为空。
    String[] schools() default {"浙江工商大学", "浙江大学"};
}

@interface MyAnnotation2{
    String value();
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值