Java注释@interface的用法

RK3576平台Buildroot嵌入式Linux镜像构建实战 嵌入式Linux镜像构建是连接硬件能力与软件功能的核心技术环节,其本质是基于目标SoC架构的交叉编译、内核定制与根文件系统集成过程。原理上依赖工具链适配、设备树绑定、分区镜像生成等关键步骤,技术价值在于实现轻量、确定、可复现的系统交付。典型应用场景涵盖ARM64开发板(如RK3576)、工业边缘网关及国产化信创终端。本文以TaishanPi-3为载体,深入解析Buildroot在RK3576平台上的配置裁剪、并行编译优化、genimage分区合成及update.img烧录准备,覆盖从环境选型(Ubuntu 阅读详情

Java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。
@Override,@Deprecated,@SuppressWarnings为常见的3个注解。
注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后,
JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事。

      注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法
的名字出错时,编译器就会报错,如图:


       注解@Deprecated,用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法
上用@Deprecated修饰,如图:

 

  注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候,
 如图:

  

注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

[java]  view plain  copy
  1. package com.self;  
  2. import java.lang.annotation.Retention;  
  3. import java.lang.annotation.RetentionPolicy;  
  4.   
  5. @Retention(RetentionPolicy.RUNTIME)  
  6. public @interface MyTarget  
  7. { }  
  8. 定义个一注解@MyTarget,用RetentionPolicy.RUNTIME修饰;  
  9. package com.self;  
  10. import java.lang.reflect.Method;  
  11. public class MyTargetTest  
  12. {  
  13.  @MyTarget  
  14.  public void doSomething()  
  15.  {  
  16.   System.out.println("hello world");  
  17.  }  
  18.    
  19.  public static void main(String[] args) throws Exception  
  20.  {  
  21.   Method method = MyTargetTest.class.getMethod("doSomething",null);  
  22.   if(method.isAnnotationPresent(MyTarget.class))//如果doSomething方法上存在注解@MyTarget,则为true  
  23.   {  
  24.    System.out.println(method.getAnnotation(MyTarget.class));  
  25.   }  
  26.   }  
  27. }  
  28. 上面程序打印:@com.self.MyTarget(),如果RetentionPolicy值不为RUNTIME,则不打印。  
  29.   
  30.  @Retention(RetentionPolicy.SOURCE )  
  31. public @interface Override  
  32.   
  33. @Retention(RetentionPolicy.SOURCE )  
  34. public @interface SuppressWarnings  
  35.   
  36. @Retention(RetentionPolicy.RUNTIME )  
  37. public @interface Deprecated  
  38. 由上可以看出,只有注解@Deprecated在运行时可以被JVM读取到  
  39.   
  40. 注解中可以定义属性,看例子:  
  41. @Retention(RetentionPolicy.RUNTIME)  
  42. public @interface MyAnnotation  
  43. {  
  44.  String hello() default "gege";  
  45.   String world();  
  46.   int[] array() default { 2, 4, 5, 6 };  
  47.   EnumTest.TrafficLamp lamp() ;  
  48.   TestAnnotation lannotation() default @TestAnnotation(value = "ddd");  
  49.   Class style() default String.class;  
  50. }  
  51. 上面程序中,定义一个注解@MyAnnotation,定义了6个属性,他们的名字为:  
  52. hello,world,array,lamp,lannotation,style.  
  53. 属性hello类型为String,默认值为gege  
  54. 属性world类型为String,没有默认值  
  55. 属性array类型为数组,默认值为2,4,5,6  
  56. 属性lamp类型为一个枚举,没有默认值  
  57. 属性lannotation类型为注解,默认值为@TestAnnotation,注解里的属性是注解  
  58. 属性style类型为Class,默认值为String类型的Class类型  
  59.   
  60. 看下面例子:定义了一个MyTest类,用注解@MyAnnotation修饰,注解@MyAnnotation定义的属性都赋了值  
  61. @MyAnnotation(hello = "beijing", world="shanghai",array={},lamp=TrafficLamp.RED,style=int.class)  
  62. public class MyTest  
  63. {  
  64.  @MyAnnotation(lannotation=@TestAnnotation(value="baby"), world = "shanghai",array={1,2,3},lamp=TrafficLamp.YELLOW)  
  65.  @Deprecated  
  66.  @SuppressWarnings("")  
  67.  public void output()  
  68.  {  
  69.   System.out.println("output something!");  
  70.  }  
  71. }  
  72.  接着通过反射读取注解的信息:  
  73. public class MyReflection  
  74. {  
  75.  public static void main(String[] args) throws Exception  
  76.  {  
  77.   MyTest myTest = new MyTest();  
  78.     Class<MyTest> c = MyTest.class;  
  79.     Method method = c.getMethod("output", new Class[] {});  
  80.        //如果MyTest类名上有注解@MyAnnotation修饰,则为true  
  81.   if(MyTest.class.isAnnotationPresent(MyAnnotation.class))  
  82.   {  
  83.    System.out.println("have annotation");  
  84.   }  
  85.    if (method.isAnnotationPresent(MyAnnotation.class))  
  86.    {  
  87.    method.invoke(myTest, null); //调用output方法  
  88.    //获取方法上注解@MyAnnotation的信息  
  89.      MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);  
  90.     String hello = myAnnotation.hello();  
  91.    String world = myAnnotation.world();  
  92.    System.out.println(hello + ", " + world);//打印属性hello和world的值  
  93.    System.out.println(myAnnotation.array().length);//打印属性array数组的长度  
  94.    System.out.println(myAnnotation.lannotation().value()); //打印属性lannotation的值  
  95.    System.out.println(myAnnotation.style());  
  96.    }  
  97.     //得到output方法上的所有注解,当然是被RetentionPolicy.RUNTIME修饰的  
  98.      Annotation[] annotations = method.getAnnotations();  
  99.       for (Annotation annotation : annotations)  
  100.   {  
  101.    System.out.println(annotation.annotationType().getName());  
  102.   }  
  103.    }  
  104. }  
  105. 上面程序打印:  
  106. have annotation  
  107. output something!  
  108. gege, shanghai  
  109. 3  
  110. baby  
  111. class java.lang.String  
  112. com.heima.annotation.MyAnnotation  
  113. java.lang.Deprecated  
  114.   
  115. 如果注解中有一个属性名字叫value,则在应用时可以省略属性名字不写。  
  116. 可见,@Retention(RetentionPolicy.RUNTIME )注解中,RetentionPolicy.RUNTIME是注解属性值,属性名字是value,  
  117. 属性的返回类型是RetentionPolicy,如下:  
  118. public @interface MyTarget  
  119. {  
  120.     String value();  
  121. }  
  122. 可以这样用:  
  123.   @MyTarget("aaa")  
  124.  public void doSomething()  
  125.  {  
  126.   System.out.println("hello world");  
  127.  }  
  128.    
  129. 注解@Target也是用来修饰注解的元注解,它有一个属性ElementType也是枚举类型,  
  130. 值为:ANNOTATION_TYPE CONSTRUCTOR  FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE  
  131. 如@Target(ElementType.METHOD) 修饰的注解表示该注解只能用来修饰在方法上。  
  132. @Target(ElementType.METHOD)  
  133. @Retention(RetentionPolicy.RUNTIME)  
  134. public @interface MyTarget  
  135. {  
  136.  String value() default "hahaha";  
  137. }  
  138. 如把@MyTarget修饰在类上,则程序报错,如:  
  139. @MyTarget  
  140. public class MyTargetTest  
  141. 注解大都用在开发框架中吧,好了有关注解就学习那么多了,谢谢。  

Stable Diffusion 模型分享:Indigo Furry mix(人类与野兽的混合) Indigo Furry mix 是一个混合模型,出的图具有雄性人类的体型和野兽的形态。条目内容类型大模型基础模型SD 1.5来源CIVITAI作者indigowing文件名称文件大小1.99GB。 阅读详情

相关推荐

当知识图谱遇见多模态:突破文本界限的智能认知革命

本文探讨了知识图谱与多模态技术的融合,揭示了其在医疗诊断、文化保护等领域的革命性应用。通过图神经网络、对比学习框架和跨模态注意力机制等技术,实现了文本、图像和音频数据的智能关联与认知。文章还分享了在Neo4j等图数据库中的实践案例和优化策略,为构建下一代智能认知系统提供了技术参考。

weixin_29197835的博客 464

【Java基础】注解--@interface使用详解

文章目录1. 引言2. 语法规范2.1 继承的Annotation父接口2.2 @Target中的参数ElementType2.3 @Retention中的参数RetentionPolicy2.4 成员变量3. 获取注解信息3.2 使用场景——框架初始化过程中模拟扫描jar包和文件夹中的所有注解4. 注解的作用4.1 编译检查4.2 在反射中使用 Annotation4.3 根据 Annotation 生成帮助文档参考 1. 引言 注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用

m0_45406092的博客 3万+

【已验证】基于STM32F407与AD9833的幅频特性测试装置设计与实现

本文详细介绍了基于STM32F407微控制器和AD9833 DDS芯片的低成本幅频特性测试装置设计与实现方法。通过扫频原理,该装置能自动生成正弦波信号,测量滤波器等电路的输出幅度变化,并在LCD屏幕或示波器上绘制幅频特性曲线。文章提供了从硬件选型、CubeMX工程配置、关键驱动代码编写到数据处理与可视化的完整教程,帮助电子爱好者与工程师快速搭建实用的滤波器测试工具。

weixin_35649491的博客 121

Spring中@interface的作用

@interface的作用是自定义一个新的注解 例子: package com.self; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface MyTarget { } 使用新定义的注解@MyTarget package com.self; import

sinat_34241861的博客 1697

ROS2机械臂实战:从基础控制到视觉抓取

本文详细介绍了ROS2机械臂从仿真环境搭建到视觉抓取的全流程实战指南。内容涵盖使用Gazebo搭建仿真环境、编写基础控制节点、集成视觉感知进行目标检测与坐标变换,并设计状态机逻辑实现自动化抓取。通过系统集成与联调,帮助开发者掌握ROS2机械臂开发的核心技能。

weixin_29197699的博客 454

阿里云大模型ACP认证模拟考试(二)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 2084

spring框架中 @Aspect @interface详解示例

spring 注解

orton777的博客 624

基于Arduino 的 FM 调频收音机

这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议进行通信的方法,整个过程只需要两根线就可以与 IC 通信,接线非常简单。3D 打印的外壳也非常简洁。总之,是个非常简单和实用的项目,来试试吧!

ByteBox的博客 1643

Java基础加强总结(一)——注解(Annotation)

 一、认识注解   注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注解是一种趋势,现在已经有不少的人开始用注解了,注解是JDK1.5之后才有的新特性 JDK1.5之后内部提供的三个注解        @Deprecated 意...

weixin_34194702的博客 1592

NSGA-Ⅱ算法:从原理到实战,解锁多目标优化难题

本文深入解析NSGA-Ⅱ算法在多目标优化中的应用,从原理到实战全面覆盖。通过快速非支配排序、精英策略和拥挤度比较三大创新,NSGA-Ⅱ有效解决了传统算法的效率与多样性问题。结合工业案例展示其在注塑工艺优化中的显著效果,为工程师提供实用解决方案。

weixin_29207149的博客 368

《python算法与数据结构2000讲》算法与数据结构总结

《python算法与数据结构2000讲》算法与数据结构总结

IT 甄选推荐 1104

Java注释@interface的用法【转】

Java注释@interface的用法【转】 interfacejavadeprecatedstringannotationsclass java用@interface Annotation{ }定义一个注解 @Annotation,一个注解是一个类。@Override,@Deprecated,@SuppressWarnings为常见的3个注解。注解...

weixin_30781631的博客 188

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 141

java注释@interface的用法

@interface是用来自定义JAVA Annotation的语法,普通的开发人员可能很少用到它,但是它的功能很强大,本文将具体介绍@interface的用法! @interface是用来自定义注释类型的,如果你不了解Java注释,可以参阅上一篇文章:"JDK5.0注释(Annotation)的用法"。 一般的应用程序开发人员可能从不需要定义一个注释类型,但定义我们自己的注释类型并不复杂。注

u014519196的博客 502

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[转] Java注释@interface的用法

@interface是用来自定义JAVA Annotation的语法,普通的开发人员可能很少用到它,但是它的功能很强大,本文将具体介绍@interface的用法! @interface是用来自定义注释类型的,如果你不了解Java注释,可以参阅上一篇文章:"JDK5.0注释(Annotation)的用法"。 一般的应用程序开发人员可能从不需要定义一个注释类型,但定义...

wutheringsea 172

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java注释@interface的用法(未读)

@interface是用来自定义JAVA Annotation的语法,普通的开发人员可能很少用到它,但是它的功能很强大,本文将具体介绍@interface的用法! @interface是用来自定义注释类型的,如果你不了解Java注释,可以参阅上一篇文章:"JDK5.0注释(Annotation)的用法"。 一般的应用程序开发人员可能从不需要定义一个注释类型,但定义我们自己的注释类型并不复杂。注

960

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java interface 定义_java中自定义注释@interface的用法

一、什么是注释说起注释,得先提一提什么是元数据(metadata)。所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的。在J2SE5.0中可以自定义注释。使用时在@后面跟注释的名字。二、J2SE5.0中预定义的注释在J2SE5.0的java....

weixin_35079144的博客 482

Java注释@interface的用法(Java annotation 自定义注释@interface的用法)

java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。 @Override,@Deprecated,@SuppressWarnings为常见的3个注解。 注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后, JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记

记忆沉思 2439

Java annotation 自定义注释@interface的用法

一、什么是注释     说起注释,得先提一提什么是元数据(metadata)。所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的。在J2SE5.0中可以自定义注释。使用时在@后面跟注释的名字。

yixiayizi的专栏 630

Java注释接口关键词@interface的用法

@interface是用来自定义JAVA Annotation的语法,普通的开发人员可能很少用到它,但是它的功能很强大,本文将具体介绍@interface的用法! @interface是用来自定义注释类型的,如果你不了解Java注释,可以参阅上一篇文章:”JDK5.0注释(Annotation)的用法”。 一般的应用程序开发人员可能从不需要定义一个注释类型,但定义我们自己的注释类型并不复杂。注释

曾庆国的博客 4153
上一篇: java客户端操作Hbase
下一篇: Hbase之批量数据写入
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值