注解

文章目录

  • 注解
    • 内置注解
      • 1.Override
      • 2.Deprecated压制警告
      • 3 @SuppressWarnings 压制警告,
    • 自定义注解
      • 元注解
        • @Target:限制注解 可以使用的位置
        • @Retention:限制注解的生命周期
        • @Document
        • @Inherited:继承

类:要给一个类增强一些功能?继承、实现一个接口,还可以使用注解

Class A extends B

Class A implements C

可以通过使用注解 增强类、方法、属性的功能

内置注解

1.Override

class Father{public void eat(){System.out.println("Father eat");}
}class Son extends Father{@Override//内置注解  提示重写方法单词和父类不一样public void eat() {System.out.println("Son eat...");}
}

2.Deprecated压制警告

@Deprecated //给方法由于安全、性能问题等不推荐使用此方法,使用的时候有下划线
//此外,在版本升级时,如果要计划删除一次额方法,
//也通常会在前一个版本中将该方法加上
//@Deprecated,然后在后续版本中删除

class Test{@Deprecatedpublic void foot() {System.out.println("测试");}
}public class Demo01 {public static void main(String[] args) {Test test = new Test();test.foot();}
}

3 @SuppressWarnings 压制警告,

@SuppressWarnings   //压制警告,(不建议使用)@SuppressWarnings(value = "unchecked")//value的值都有哪些  unchecked、depreation(不提示过期信息)、unused(检查是否未被使用)、//fallthrough(swtich是否一直往下执行,而没有breakc)//path(忽略对类路径不存在的检查)//serialversionUID(忽略 一个类可以序列化、但却没有序列化的 警告)//all(忽略以上所有情况)
public class Demo01 {public static void main(String[] args) {List list = new ArrayList();//黄色波浪线,泛型检查}
}

自定义注解

package annotaion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//修饰该注解能在类、属性和方法上使用
@Target(value = {ElementType.FIELD,ElementType.METHOD,ElementType.TYPE,ElementType.PARAMETER,ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation {String value() default "张三";int age() default 22;//用定义方法的形式,定义一个属性//方法的名字,就是属性的名字;方法的返回值,就是属性的类型
}-------------------------------------使用
package annotaion;import jdk.internal.org.objectweb.asm.tree.analysis.Value;import java.lang.annotation.Annotation;public class TestMyAnnotation {@MyAnnotation(value = "李四", age = 24)public static void test() throws Exception {//使用注解Annotation[] annotations = Class.forName("annotaion.TestMyAnnotation").getMethod("test").getAnnotations();for (Annotation a : annotations) {if(a instanceof MyAnnotation){//判断注解System.out.println(((MyAnnotation) a).age());System.out.println(((MyAnnotation) a).value());}else{System.out.println(" @Deprecated...");}}}public static void main(String[] args)throws Exception  {test();}
}//24
//李四
//@Deprecated...

元注解

元数据:修饰数据的数据

元注解:修饰注解的注解

自定义注解如何使用?结合反射使用

注解+反射 什么时候会真正的使用?开发框架时 Spring mybatis SpringMVC


@Target:限制注解 可以使用的位置

限制注解 能够使用哪些元素上(属性、方法、类);如果一个注解没有@Target描述,则该注解可以修饰任何类型的元素,如果有@Target修饰,该注解就只能用于被@Target修饰的地方

哪些位置 ? ElementType枚举

public enum ElementType {/** 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
}

@Retention:限制注解的生命周期

public enum RetentionPolicy {/*** Annotations are to be discarded by the compiler.* jvm直接将该注解丢弃*/SOURCE,()/*** Annotations are to be recorded in the class file by the compiler* but need not be retained by the VM at run time.  This is the default* behavior.* .java->.class* 程序在编译时,会使用注解,在运行时不会使用*/CLASS,/*** Annotations are to be recorded in the class file by the compiler and* retained by the VM at run time, so they may be read reflectively.** @see java.lang.reflect.AnnotatedElement* 程序在编译时及运行时,都会注解*/RUNTIME
}

@Document

javaDoc:java帮助文档。.java->帮助文档

默认情况下,javadoc不包含注解的解释

如果想在javadoc文档中中也包含注解的使用说明,就需要使用@Document(放到自定义注解前)

例如,以下MyAnnotation注解 ,会在生成javadoc时,被显示在文档中

@Documented
public @inteface MyAnnotation{}

@Inherited:继承

@Inherited
public @inteface MyAnnotation{}
public class A{}public class B extends A{}//默认情况下,B不会继承A 中的注解,如果继承则加继承(在自定义注解前加)

九、注解、有助于更好的理解框架相关推荐

  1. 理解Kotlin语言独有的位置注解,让注解控制更精准

    在Kotlin语言编写的代码中,你应该看到过类似这样的注解@file:JvmName(...),这有点难以理解,正常的注解不会存在类似@file:这样的前缀,在Java语言中也没有类似的语法.那么,这 ...

  2. 【论文翻译】统一知识图谱学习和建议:更好地理解用户偏好

    一.摘要 将知识图谱(KG)纳入推荐系统有望提高推荐的准确性和可解释性.然而,现有方法主要假设KG是完整的并且简单地在实体原始数据或嵌入的浅层中转移KG中的"知识".这可能导致性能 ...

  3. ACL 2020 | 基于机器阅读理解框架的命名实体识别方法

    论文标题: A Unified MRC Framework for Named Entity Recognition 论文作者: Xiaoya Li, Jingrong Feng, Jiwei Li ...

  4. 帮助你更好的理解Spring循环依赖

    网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...

  5. 百度王海峰:多模态深度语义理解将让AI更深地理解真实世界

    7月4日召开的百度AI开发者大会(Baidu Create 2018)上,百度高级副总裁.AI技术平台体系(AIG)总负责人王海峰发布百度大脑3.0,并指出,百度大脑3.0的核心是"多模态深 ...

  6. ​如何让技术想法更容易被理解?

    简介: 沟通说起来简单,要做好却很难.如何把复杂的技术问题通俗易懂地表达出来,让别人听懂,是每个技术人都会面临的难题.本文作者以自身经历为背景,总结技术人员在日常技术交流过程中,遇到的一些低效的技术沟 ...

  7. 一份帮助你更好地理解深度学习的资源清单

    摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...

  8. 一份帮助你更好地理解深度学习的资源清单 1

    摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...

  9. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

  10. 独家 | 如何在BigQueryML中使用K-均值聚类来更好地理解和描述数据(附代码)

    原文:拉克什曼Lak Lakshmanan 翻译:陈之炎 校对:吴金笛 本文约2600字,建议阅读10+分钟. 本文教你如何在BigQueryML中使用K均值聚类对数据进行分组,进而更好地理解和描述. ...

最新文章

  1. socket缓冲区以及阻塞模式详解
  2. MySQL之逻辑架构和存储引擎
  3. PGer看过来!亚洲最大的PG技术盛会重磅来袭!墨天轮全球同步直播!
  4. 研究大学生基础课程成绩和专业课程成绩的关系,证明两者之间是否有线性关系
  5. 一些javascript的经验 (3)
  6. uboot 使用fdt命令查看设备树
  7. 计算机电脑桌面怎么设置,老司机教你电脑屏保怎么设置
  8. c语言可以在python上运行吗_c语言如何运行python脚本
  9. led伏安特性实验误差分析_大学物理实验伏安特性曲线的误差分析以及小结要怎么写,谢谢^ω^...
  10. Laravel框架之微信授权获取用户信息
  11. Java基础教程笔记
  12. linux 32 telnet 工具,Telnet/SSH/SSH2终端工具(Zoc terminal)
  13. HTML中怎么改变一条线的粗细
  14. 3G杀手应用还是全方位轰炸?
  15. anmate.css怎么用,animate.css使用方法是什么
  16. 计算机操作系统(八)——并发程序设计
  17. 数字转换为十六进制数
  18. pdfjs 使用viewer 实现自动翻页(js控制)
  19. 数据结构6:栈的应用(十进制转化为二进制)
  20. oracle查看表空间的序号,Oracle查询所有序列

热门文章

  1. pyspark分类算法之梯度提升决策树分类器模型GBDT实践【gradientBoostedTreeClassifier】
  2. dlib android 识别时间,android dlib调用
  3. 小米商城抢购脚本_小米十周年感恩季-816活动攻略
  4. C++ 数字 4294967295是什么意思
  5. C++ Make、Makefile、CMake和CMakeLists关系
  6. linux shell cut -d ‘:‘ -f1,3
  7. prometheus grafana监控 各个cpu核心利用率
  8. java 开关按钮_SwitchButton开关按钮的多种实现方式
  9. JDBC02 加载JDBC驱动 建立连接
  10. 动画效果之 Canvas学习-globalCompositeOperation详解