自学内容网 自学内容网

Java常用的三种注解

1、 基本注解

一、注解的概念

    1、注解也叫元数据,是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。注解的形式是“@+单词”。 在不改变原有逻辑的情况下,使用注解在源文件中嵌入一-些补充信息。

    2、其实同class、interface一样,注解也是一种类型。

二、注解的作用

    (1)生成文档,通过代码里标识的元数据生成javadoc文档。

    (2)编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。

    (3)编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。

    (4)运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。

三、三种类型的注解

    (1)第一类是Java自带的标准注解。

              @Override:告诉编译器检查当前方法是否覆盖了父类的方法。

              @Deprecated:标示该 方法已经过时,在高版本的代码中进行调用,编译该方法时会进行警告。

              @SuppressWarnings:抑制编译器警告,取消显示的编译器警告信息。

@ Override举例:

Student类的父类是Object类,Object类含有toString()方法,不含有study()方法

@Deprecated举例:

代码:

public class Student {
    //标记此方法已经过时,在高版本的类中调用此方法时,会显示“过时”警告信息
    @Deprecated
    public void study(){
    }
}

@SuppressWarnings举例:

public class Student {

    //抹除因为没有启用泛型产生的警告

    @SuppressWarnings("rawtypes")

    public List list=new ArrayList();

}

@SuppressWarning可以定义成员属性,也可以定义类。

2 、元注解

第二类是元注解(Meta Annotation),也就是用于定义注解的注解。

    @Target:用于指定被修饰的Annotation可用于什么地方

    @Retention:表示需要在什么级别保存该注解信息

    @Documented:表示该注解包含在Javadoc中

    @Inherited:允许子类继承父类中的注解

1、@Target:指定了注解应用的地方,取值如下:

    ElementType.ANNOTATION_TYPE:可以给一个注解进行注解

    ElementType.TYPE:可以给接口、类、枚举等进行注解

    ElementType.FIELD:可以给字段、枚举的常量注解

    ElementType.METHOD:可以给方法注解

    ElementType.PARAMETER:可以给方法参数注解

    ElementType.cONSTRUCTOR:可以给构造方法注解

    ElementType.LOCAL_VARIABLE:可以给局部变量注解

    ElementType.PACKAGE:可以给包进行注解

2、@Retention:当Retention应用到某个注解上表示该注解的存活时间,取值如下:

    RetentionPolicy.soURCE:注解只存在源码阶段,编译器编译时注解失效。

    RetentionPolicy.CLASS:注解保留到编译进行的时候,并不会被加载到JVM中。

    RetentionPolicy.RUNTIME:注解保留到程序进行的时候,会被加裁到JVM中,在程序运行的时候可以获取这些注解信息。

3、 自定义注解-1

第三类是自定义注解,根据自己的需求定义注解,并可用元注解对自定义注解进行注解。语法:

    public @interface 注解名称{ }

根据Annotaion是否包含成员变量,可以把注解分成两类:

    (1)标记注解:没有成员变量的注解类型,该类型注解只提供存在与否的标识信息,例如@Override

    (2)元数据注解:包含成员变量的注解,该类型注解可以接受更多的元数据。

代码:

package cn.edu.xync.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType. TYPE)  //表明该自定叉注解可以应用到什么位置

@Retention(RetentionPolicy.RUNTIME) //表明该注解能存活到什么时候

public @interface MyAnnotation {

    //此时该注解为空,表明该自定义注解是一个标记注解

    String name();  //注解中定义的成员变量后面必须加括号(看着像定义方法)

    int age();  //包含了成员变量的注解称为元数据注解

            //成员变量的访问权限只能是共有或者缺省,不能是私有或者受保护
}

在Student类中使用注解@MyAnnotation

总结:

       在Java中,如果你声明了一个变量但没有给它赋初始值,那么这个变量将被赋予默认值。以下是一些常见数据类型的默认值:整型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)、引用类型(对象、数组),

    这些默认值在Java中被称为缺省值,它们在变量声明时自动赋予,可以通过明确赋值来覆盖这些缺省值。

4、 自定义注解-2

自定义注解设置默认值,在使用时,可以不赋值

修改:@Target(ElementType. METHOD

public interface MyInterface {

    @MyAnnotation

    void work();
}

修改:@Target(ElementType. FIELD)

public class Student implements Serializable {

    //抹除因为没有启用泛型产生的警告

    @SuppressWarnings("rawtypes")

    @MyAnnotation

    public List list=new ArrayList();
}

5、 自定义注解-3

修改:@Target(ElementType.CONSTRUCTOR)

package cn.edu.xync.annotation;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;


@SuppressWarnings("serial")

 //元数据注解需要给成员变量赋值

public class Student implements Serializable {

    //抹除因为没有启用泛型产生的警告

    @SuppressWarnings("rawtypes")

    public List list=new ArrayList();

    private String name;

    private int age;


    @Override

    public String toString() {

        return "";

    }


    @Deprecated

    public void study(){

    }


    @MyAnnotation(name="李四",age=20)

    public Student(){

        super();

    }


    @MyAnnotation(name="李四",age=20)

    public Student(String name, int age) {

        super();

        this.name = name;

        this.age = age;

    }

}
修改:@Target(ElementType.PARAMETER)
@Deprecated

public void study(@MyAnnotation(name="李四",age=20) String type){

}


原文地址:https://blog.csdn.net/m0_65347933/article/details/140360570

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!