首页 > 编程语言 >Java注解

Java注解

时间:2024-02-29 15:57:35浏览次数:40  
标签:文件 Java name age RetentionPolicy 注解 class

一:元注解:

元注解(meta-annotation)是指用来注解其他注解的注解。Java语言中提供了4种元注解,分别是@Retention、@Target、@Inherited和@Documented。它们的作用如下:

例如,@Retention有一个属性value,是RetentionPolicy类型的,而RetentionPolicy是一个枚举类型

RetentionPolicy有SOURCE、CLASS、RUNTIME三个值
-  RetentionPolicy.SOURCE:被修饰的注解只会保留在源文件,当.java文件编译成.class文件时,被修饰的注解会被遗弃
-  RetentionPolicy.CLASS:被修饰的注解被保留到.class文件,jvm加载.class文件时候被遗弃,是默认的生命周期
-  RetentionPolicy.RUNTIME:被修饰的注解不仅被保存到.class文件中,jvm加载class文件之后还会存在
-  java源文件(.java文件) 、编译后的文件(.class文件) 、内存中的字节码,生命周期比较 SOURCE < CLASS < RUNTIME ,作用范围越来越大

@Target:用于指定注解的作用目标。它有一个属性value,可以设置为ElementType.TYPE、ElementType.FIELD、ElementType.METHOD等,表示注解可以作用于类、字段、方法等不同的目标上。
@Inherited:用于指定注解是否可以被继承。如果一个注解被@Inherited注解,则它被用来注解的类的子类也会继承这个注解。
@Documented:用于指定注解是否包含在JavaDoc中。如果一个注解被@Documented注解,则它会被包含在JavaDoc中,方便开发者查看。

二:自定义注解

 自定义注解需要使用关键字@interface来定义

第一个文件:
package org.hj.com;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String name();
    int age();
}

第二个文件:

package org.hj.com;

@MyAnnotation(name="张三",age=28)
public class HelloAnno {
    public static void main(String[] args) {
        MyAnnotation myAnnotation = HelloAnno.class.getAnnotation(MyAnnotation.class);
        String name = myAnnotation.name();
        int age = myAnnotation.age();
        System.out.println("获取到的注解name="+name);
        System.out.println("获取到的注解age="+age);
    }
}

  

 

标签:文件,Java,name,age,RetentionPolicy,注解,class
From: https://www.cnblogs.com/tianpan666/p/18044452

相关文章

  • linux下准确查询正在tomcat下运行的java进程。准确获取正在运行的java进程的PID
    查看当前运行的所有的java进程,命令:【一定要注意,取那个你配置的JAVA_HOME全局变量的那个java进程的PID】ps-ef|grepjava     准确获取定位到tomcat下正在运行的java进程的PID命令:ps-ef|grepjava|grepcatalina|awk'{print$2}' 准确定位到tomcat下......
  • java 替换Map中key的值
    importjava.util.*;importjava.util.stream.Collectors;publicclassMapKeyReplacement{publicstaticvoidmain(String[]args){//假设我们有如下的List<Map<String,String>>List<Map<String,String>>list=Arrays.asL......
  • Java HashMap 详解
    HashMapHashMap继承自AbstractMap,实现了Map接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为null。因为key不允许重复,因此只能有一个键为null。HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不相同。HashMap是线程不安全的。1.哈希表哈希表基于数......
  • javascript中的var,let,const区别
    const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于var来说是这样执行的varm;console.log(m);m=10;let不存在变量提升,会直接报错   2、var是全局......
  • 2.28继续javaweb
     今天继续昨天没有完成的内容@Data@AllArgsConstructor@NoArgsConstructorpublicclassPlan{privateStringname;privateintnumber;privateStringsum;privateStringidea;privateStringenglish;privateStringmath;privateLocalDateT......
  • 扣子(coze.cn)| 由浅入深,手把手带你实现Java转型学习助手
    扣子(coze.cn)是一款用来开发新一代AIChatBot的应用编辑平台,无论你是否有编程基础,都可以通过这个平台来快速创建各种类型的ChatBot,并将其发布到各类社交平台和通讯软件上!2月1日,扣子国内版已经正式上线啦~赶快来体验一下吧!一转眼,ChatGPT已经在AI界炙手可热超过一年,堪称新晋......
  • 「java.util.concurrent并发包」之 Semaphore
    一Semaphore是什么Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。Semaphore内部维护了一组虚拟的许可,许可的数量可以通过构造函数的参数指定。访问特定资源前,必须使用acquire方法获得许可,如果许可数量为0......
  • java向上转型和向下转型
    1.问题向上转型的意义是什么?向下转型又有什么条件?2.解决参考:聊聊java的向上转型与向下转型向上转型向上转型是用来表现新类和基类之间的关系。在传统中,由导出类转型成基类,在继承图中是向上移动的。因此称作向上转型。由于向上转型是从一个较专用类型向较通用类型转换,所以总......
  • JAVA虚拟机系列: (一) . JDK1.6/ 1.7/ 1.8运行时内存分配简要图解
     注意:  1.本文讨论均为JDK官方版本,默认采用的HotSpot虚拟机;  2.图片为本人绘制,转载请标明出处;  3.本博均为个人理解,如有分歧,欢迎指正和讨论 从JDK1.6到1.8,运行时内存分配简图分别如下:  在JDK1.7中的HotSpot中,已经把原本放在方法区的字......
  • java参数 -xms -xmx
    参考链接:https://blog.csdn.net/lgleje/article/details/125041480xms、xmx-xms:设置初始化堆内存大小,默认2M-xmx:设置最大可分配堆内存大小,默认64M示例:#初始化128MB堆内存,允许最大堆内存最大1024MB.java-Xms128m-Xmx1024m#初始化256MB堆内存,允许最大......