Java SE再 梦回注解

什么是注解?

注解(Annotation)从JDK5.0引入的新技术。
Annotation的作用:

  1. 不是程序本身,可以对程序作出解释(与注释(conment)没有什么区别)
  2. 可以被其他程序或者是编译器读取

Annotation的格式:

@+注释名 形式存在,还可以再注解后面添加一些参数值
如:@SuppressWarnings(value=“unchecked”)

Annotation在何处使用?

可以在package、class、method、field处上面,相当于给他们添加了额外的辅助信息,
我们可以通过反射机制编程实现对这些元数据的访问
注解还有检查和约束的作用,在使用注解的时候,会自动的对所注解的对象进行检查

内置注解

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解:
@Override :检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated : 标记过时方法。如果使用该方法,会报编译警告。加了注解之后,调用此方法就会显示,不推荐程序员使用,,或者有更好的方式,但是可以使用。
@SuppressWarnings : 用于抑制编译器产生警告信息。
@SuppressWarnings(“all”)
@SuppressWarnings(“unchecked”)
@SuppressWarnings("value={“unchecked”,“deprecation”})
……

元注解:作用在其他注解的注解:

四个标准的元注解:

  1. @Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。( value= [ sourcee<class<runtime ] )
  2. @Documented - 标记这些注解是否包含在用户文档中。
  3. @Target - 标记这个注解应该是哪种 Java 成员。
  /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
  1. @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

举例:实现一个自己的注解·

package src;
import java.lang.annotation.*;
public class test1 {
//    表示使用自己的注解
    @MyAnnotation
    public void test(){

    }

}
// 创建一个自己的注解

@Documented
// 表示是否将我们的注解生成Javadoc中

// 表示我们的注解在什么地方使用(runtime,class,source)
@Retention(value = RetentionPolicy.RUNTIME)

// target:表示我们的注解所在的作用域
//@Target(value = ElementType.METHOD)
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@interface  MyAnnotation{

}

案例使用 自定义注解:

  • 使用@interface 自定义注解时,自动继承了Java.lang.annottation.Annotation接口
    分析:
  • @interface用来声明一个注解,格式@+自定义的注解名{定义内容 }
    如果在类里面定义省略public
  • 注解的括号里面是配置参数
  • 方法的名称就是参数的名称
  • 参数值只能是基本类型
  • 可以通过default声明参数的默认值
  • 如果只有一个参数成员,一般参数名为value,也可以省略不写
  • 注解元素必须要有值,定义元素时经常使用空字符串或者0作为默认值

示例代码:

package src;
import java.lang.annotation.*;
public class test1 {
//    使用自己的注解
//    @MyAnnotation(name = "")
    @MyAnnotation(value = "")
    public void test1(){
    }
}
// 创建一个自己的注解
@Documented
// 表示是否将我们的注解生成Javadoc中
// 表示我们的注解在什么地方使用(runtime,class,source)
@Retention(value = RetentionPolicy.RUNTIME)
// target:表示我们的注解所在的作用域
//@Target(value = ElementType.METHOD)
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@interface  MyAnnotation{
//    注解的参数:参数类型+ 参数名();

//    此时在name的后面可是否添加default;不添加的话,
//    当调用此注解的时候必须赋值参数的值,反而如果default就会在调用注解的时候不需要设置参数的值
//    String name() ;
    String value() ;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值