栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java注解

文章目录

前言注解简介内置注解

@Retention@documented@Target@Inherited@Override@Deprecated@SuppressWarnings 测试内置注解元注解测试元注解自定义注解后续

前言

前面已经提到java注解和反射是java的重要特征之一,上篇文章已经介绍了java反射,现在介绍一下注解,怎么说呢,注解比反射的内容要少一点,更容易理解一点,在框架中使用注解进行开发是常见的手段之一。

注解简介

Annotation 是从JDK5.0开始引入的新技术 .

Annotation的作用
不是程序本身 , 可以对程序作出解释.(这一点和注释(comment)没什么区别)
可以被其他程序(比如:编译器等)读取.

Annotation的格式
注解是以"@注释名"在代码中存在的
还可以添加一些参数值 , 例如:@SuppressWarnings(value=“unchecked”)

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

内置注解

内置注解大多是专门的,但@SuppressWarnings是通用的

@Retention
@documented
@Target
@Inherited
@Override
@Deprecated
@SuppressWarnings
@Retention

@Retention被设计为仅用作另一个注释的注释。它指定保留策略。

@documented

@documented注释是一个标记界面,它通知工具要注释标记。

@Target

@Target 注释指定了声明的类型可以应用注释。

它被设计为仅用作对另一注释的注释。 @Target接受一个参数,它必须是ElementType枚举的常量。
目标常量注释可以应用于

ANNOTATION_TYPE另一个注释
ConSTRUCTOR 构造函数
FIELD 领域
LOCAL_VARIABLE 局部变量
METHOD 方法
PACKAGE 包
PARAMETER 参数
TYPE 类, 接口, 或者 枚举

您可以在@Target注释中指定一个或多个这些值。 要指定多个值,必须在括号分隔列表中指定它们。 例如:

@Target( { ElementType.FIELD, ElementType.LOCAL_VARIABLE } )
@Inherited

@Inherited 是一个标记注释,只能用于另一个注释声明。它只影响将在类声明中使用的注释。 @Inherited 使得超类的注释由子类继承。

@Override

@Override是只能在方法上使用的标记注释。使用@Override注释的方法必须覆盖超类中的方法。

@Deprecated

@Deprecated是标记注释。表示不鼓励程序员使用这样的元素 , 通常是因为它很危险或者存在更好的选择

@SuppressWarnings

@SuppressWarnings 指定可能由编译器发出的一个或多个警告被抑制。要禁止的警告由名称以字符串形式指定。此注释可应用于任何类型的声明。

测试内置注解
  package com.annotation; //测试内置注解
  import java.util.ArrayList;
  import java.util.List; //所有类默认继承Object类 
  public class Test1 extends Object { 
  //@Override 表示方法重写 
  //--> 查看JDK帮助文档 
  //--> 测试名字不同产生的效果 
  @Override
   public String toString() { 
   return super.toString();
   }
   //方法过时了, 不建议使用 , 可能存在问题 , 并不是不能使用! 
   //--> 查看JDK帮助文档 
   @Deprecated 
    public static void stop(){
    System.out.println("测试 @Deprecated"); 
    }
    //@SuppressWarnings 抑制警告 , 可以传参数 
    //--> 查看JDK帮助文档 
    //查看源码:发现 参数类型 和 参数名称 , 并不是方法! 
    @SuppressWarnings("all")
     public void sw(){
      List list = new ArrayList(); 
      }
      public static void main(String[] args) { 
      stop(); 
      } 
      }
元注解

元注解的作用就是负责注解其他注解 , Java定义了**4个标准的meta-annotation类型,**他们被用来提供对其他annotation类型作说明 .
这些类型和它们所支持的类在java.lang.annotation包中可以找到 .

( @Target , @Retention ,@documented , @Inherited )

@Target : 用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Retention : 表示需要在什么级别保存该注释信息 , 用于描述注解的生命周期
(SOURCE < CLASS < RUNTIME)
@document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解

测试元注解
@MyAnnotation
public class Demo02_metaAnnotation {
    @MyAnnotation
    public void test() {

    }
}

//定义一个注解
//@Target可以用在什么地方
//ElementType.METHOD方法上有效  ElementType.TYPE类上有效
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//@Retention在什么地方有效
//RUNTIME>CLASS>SOURCES
@Retention(value = RetentionPolicy.RUNTIME)
//@documented 表示是否将我们的注解生成在Javadoc中
@documented
//@Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation { }
自定义注解

//自定义注解
public class Demo03_CustomAnnotation {
    //注解可以显示赋值,如果没有默认值,就必须给注解赋值
    @MyAnnotation2(name = "张三")
    public void test() {
    }
}

@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    //注解的参数:参数类型+参数名()
    //String name();
    String name() default "";
    int age() default 0;
    int id() default -1;//-1代表不存在
    String[] schools() default {"湖南中医药大学","6-405大学"};


后续

其实java注解还有其他的一些,像之前的myabtis中就导入了一个叫做lombok的插件,然后在实体类上加注解就可以不用写构造方法那些东西,精简了代码,总而言之,学无止尽!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号