JAVA——注解详解

Java-注解详解 注解是JDK1.5引入的特性,用于对代码进行说明,适用于包、类、接口、字段、方法参数等。主要作用包括生成文档、编译检查、编译时和运行时动态处理。注解分为标准注解(如@Override、@Deprecated、@SuppressWarnings)、元注解(如@Retention、@Target、@Inherited、@Documented)和自定义注解。元注解用于定义注解的保留阶段、使用范围、继承性等。自定义注解可根据需求定义,并通过元注解进行进一步描述。注解在Java开发中广泛应用于代码的说明、编译检查和动 阅读详情

注解(Annotation)

概念:

Java提供的一种原程序中元素关联任何信息和任何元数据的途径和方法。


常见的注解有哪些呢?

JDK中的注解,例如:@Overrid, @Deprecated, @SuppressWarnings等。

第三方注解,例如Spring中的@Autowired, @Service, @Repository, @Table等。


注解的分类:

按照运行机制:

1.源码注解 2.编译时注解 3.运行时注解

源码注解就是只存在与源码中的注解,编译成.class文件之后是不存在的。

编译时注解是源码和.class文件中都存在的注解。

而运行时注解则在运行时刻还起作用,会影响运行时刻的逻辑。

按照来源划分:

1.JDK注解 2.第三方注解 3.自定义注解


要深入学习注解,则必须掌握自定义注解。

要掌握自定义注解,则必须先了解Java为我们提供的元注解和相关定义注解的语法。


元注解:

元注解就是注解的注解,作用就是负责注解其他注解。

Java 5.0定义了4个元注解 1.@Target 2.@Retention 3.@Documented 4.@Inherited


@Target:

@Target说明了Annotation所修饰的对象范围,即:被描述的注解可以用在什么地方

有以下取值:(ElementType)

1.CONSTRUCTOR: 描述构造器
2.FIELD: 描述字段
3.LOCAL_VARIABLE: 描述局部变量
4.METHOD: 描述方法
5.PACKAGE: 描述包
6.PARAMETER: 描述参数
7.TYPE: 描述类、接口(包括注解类型) 或enum声明


@Retention:

@Retention定义了注解的生命周期,也是运行机制。

有以下取值:(RetentionPolicy)

1.SOURCE: 在源文件中有效(即源文件保留)
2.CLASS: 在class文件中有效(即class保留)
3.RUNTIME: 在运行时有效(即运行时保留)


@Documented:

@Documented注解指示了在export导出javadoc的时候会包含注解,即生成文档的时候非常方便。它没有成员。


@Inherited:

@Inherited注解是一个标记注解,没有成员。表明当前这个被注解的类的注解是可继承的(这里有点绕)。

但是如果是方法或者接口interface被注解,那么继承是不起作用的。只对类起作用。

例如:加入我有一个MyAnnotation的自定义注解,并且是@Inherited的。

@MyAnnotation // 可以被继承
class Demo {

  @MyAnnotation // 不会被继承
  public void aMethod();
}


接下来是自定义注解的语法格式:

public @interface 注解名 {
  定义体,即成员
}
其中有如下要求:

1.成员类型是受限的,合法的类型包括基本数据类型,String,Class,Annotation,Enumeration,可以使用default定义默认值。

2.如果注解只有一个成员,那么成员的名字必须取名为value(),使用时忽略参数和=。

3.如果没有成员的话,注解就是标识注解。

简单的实例:

@Target({ElementType.METHOD, ElementType.TYPE}) 	// 注解的作用范围,方法和类接口。
@Retention(RetentionPolicy.RUNTIME)		// 注解的生命周期,是运行时周期
@Documented					// 导出javadoc时带上这个注解
@Inherited					// 是可继承的
public @interface MyAnnotation {
  String var1() default "";			// 设置成员默认值,因为注解元素必须有值,所以一般用null或""指示为空。
  int var2() default 0;
}

注解的使用:

@MyAnnotation(var1="class", var2=1)
public class Demo {

  @MyAnnotation(var1="method")
  public void method1() {
    ...
  }
}



注解的解析:

主要采用反射机制,获取类,函数或成员的运行时注解信息,从而实现动态控制程序的逻辑的操作。

例子:

自定义注解:MyAnnotaion.java

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

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	String value();
}


使用注解的类:BeAnnotatedClass.java

@MyAnnotation("Class Annotation")
public class BeAnnotatedClass {
	
	@MyAnnotation("Method Annotation")
	public void method() {
		return;
	}
}

解析注解的Main: Main.java

import java.lang.reflect.Method;

public class Main {
	
	public static void main(String args[]) {
		/* 1.加载类
		 * 2.找到类的注解
		 * 3.拿到注解的值
		 * 4.找到方法上的注解
		 * 5.拿到注解的值
		 * */
		try {
			// 类
			Class c = Class.forName("BeAnnotatedClass");
			if (c.isAnnotationPresent(MyAnnotation.class)) {
				MyAnnotation ma = (MyAnnotation)c.getAnnotation(MyAnnotation.class);
				System.out.println(ma.value());
			}
			
			// 方法
			Method[] ms = c.getMethods();
			for (Method m: ms) {
				if (m.isAnnotationPresent(MyAnnotation.class)) {
					MyAnnotation ma = (MyAnnotation)m.getAnnotation(MyAnnotation.class);
					System.out.println(ma.value());
				}
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}


运行结果:


这样,就可以得到注释的值,可以动态的控制程序的逻辑。



注解导出表格方法 java注解实现excel导出,直接可以在myeclipse中运行即可 立即下载

相关推荐

Windows下快速搭建MSYS2开发环境(含GCC与MinGW配置)

本文详细介绍了在Windows系统下快速搭建MSYS2开发环境的完整流程。通过使用pacman包管理器,可以便捷地安装GCC编译器与MinGW-w64工具链,并配置系统环境变量。文章还涵盖了从基础安装、系统更新到编译开源项目的实战指南,帮助开发者高效构建原生Windows程序,显著提升C/C++开发效率。

weixin_29213827的博客 538

关于Excel的各种注解

在实际工作中用到的再慢慢补充 public class Demo{ //字段不能为空 @NotBlank(message = "ID不能为空") private String Id; //cellType 定义导出数据类型(如0数字 1字符串) @Excel(name = "上级ID", cellType = Excel.ColumnType.NUMERIC) private String parentId; //type 定义字段类型 @E

qq_43432057的博客 3210

电流互感器的使用分析

有关电流互感器使用的注意事项,回头再看,耳目一新。

qq_46757048的博客 2万+

Java的注解(Annotation)

http://developer.51cto.com/art/201202/316190.htm http://initialm.iteye.com/blog/1952441

Habby的专栏 676

手把手教你用YOLOv5和OpenCV实现DNF全自动刷图(含自动拾取与Boss战逻辑)

本文详细介绍了如何使用YOLOv5和OpenCV构建DNF全自动刷图系统,包括环境配置、游戏画面采集、目标检测、场景导航及操作控制等核心模块。通过实战案例,帮助开发者掌握游戏自动化技术,实现自动拾取与Boss战逻辑,提升游戏效率。

weixin_42628941的博客 446

STM32驱动AS5600磁性旋转位置传感器模块

文章目录简介引脚定义I2C接口写数据读数据从指定的地址开始读数据驱动程序cubeMX配置驱动程序`bsp_as5600.h``bsp_as5600.c`测试程序参考资料 简介 AS5600 是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。 这种非接触式系统测量径向磁化轴上磁铁的绝对角度。 该 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何同质外部杂散磁场的影响。 引脚定义 I2C接口 7位设备地址为0x36(二进制表示为0110110) 支持标准模式和

ApexYuan 1万+

GDScript 导出变量 (Godot4.0)

Godot4.0新的导出变量语法

巽的博客 3万+

Unity URP半透明物体渲染避坑指南:双面渲染与深度写入的实战技巧

本文深入探讨了Unity URP中半透明物体自交叠渲染问题的核心根源与解决方案。针对模型自身交叠导致的排序错误,文章提供了双面渲染与深度写入两种实战技巧,详细分析了其实现原理、性能开销及适用场景,帮助开发者根据项目需求选择最优方案,有效提升玻璃、水体等材质的视觉表现。

sunny的博客 545

全面解析Java注解

1.  了解注解 我们有必要对JDK 5.0新增的注解(Annotation)技术进行简单的学习,因为Spring 支持@AspectJ,而@AspectJ本身就是基于JDK 5.0的注解技术。所以学习JDK 5.0的注解知识有助于我们更好地理解和掌握Spring的AOP技术。 对于Java开发人员来说,在编写代码时,除了源程序以外,我们还会使用Javadoc标签对类、方法或成员变量进行注释,

软件设计专栏 6044

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1659

《MySQL 入门教程》第 03 篇 管理数据库

本篇主要介绍 MySQL 数据库的创建、查看、选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式。

Tony.Dong的专栏 3522

google的@SerializedName和@Expose注解

google的@SerializedName和@Expose注解 2015年02月03日 15:09:45 阅读数:387 注解了@SerializedName的字段会被序列化到JSON中,输出的JSON格式中的名字即为注解时给定的名字。 Java代码  public class SomeClassWithFields {       @SerializedName("name") pr...

qq_34979546的博客 609

SLAM Cartographer(18)后端优化问题求解器

了解经过闭环检测构建了子图与节点之间的约束之后,通过后端优化求解器进行优化求解。核心是基于Ceres库进行SPA(Sparse Pose Adjustment)的优化方法,把后端优化问题描述成为一个最小二乘的问题求解

氢键H-H 5680

Java注解详解

什么是注解,为什么用注解,Java的常用注解?

程序员小杨哥的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java注解

为什么要引入注解? 使用【注解】之前(甚至在使用之后),【XML】被广泛的应用于描述元数据,得到各大框架的青睐,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,【XML】的内容也越来越复杂,一些应用开发人员和架构师发现维护成本变高。他们希望使用一些和代码紧耦合的东西,于是就有人提出来一种标记式高耦合的配置方式【注解】。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,...

ThinkWon的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java注解——@Override注解(详解1)

Java注解——@Override注解 注解Annotation是一种引用数据类型。编译之后也是生成xxx.class文件。注解可以出现在类上,属性上,方法上,变量上等,还可以出现在注解类型上。 默认情况下,注解可以出现在任意位置。 凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。......

Best_Basic的博客 1万+

假人有限元模型

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

Java 注解与元注解详解

摘要:Java注解是JDK5引入的元数据机制,用于为代码提供附加信息而不影响逻辑。文章详细解析了注解的核心价值、标准注解(如@Override)、元注解(Target/Retention等)及其使用场景,并介绍了自定义注解的开发规范与处理机制(编译时/运行时)。同时涵盖Java8+对注解的增强(类型注解、重复注解)及在Spring等框架中的典型应用,为开发者提供了全面的注解技术参考。

csdn_tom_168的博客 794

Java——注解详解

注解是那些插入到源代码中使用其它工具可以对其进行处理的标签。这些工具可以在源码层次上进行操作,或者可以处理编译器在其中放置了注解的类文件。注解不会改变程序的编译方式。Java编泽器对于包含注解和不包含注解的代码会生成相同的虚拟机指令。注解的一些可能的用法:注解是由注解接口来定义的: 例如,下面的注解具有两个元素:assignedTo和serverity: 所有的注解接口都隐式地扩展自接口。这个接口是一个常规接口,不是一个注解接口: 注解元素的类型为下列之一: 1.2、注解格式 每个注解都具有下面这种格式:

吴声子夜歌的博客 5828

java注解详解

java注解了解一下

weixin_42330641的博客 2964

【详解 Java 注解】

【1】自定义注解使用很少,一般情况下都是用现成的注解。【2】如何自定义注解:@interface,跟接口没有一点关系。【3】注解的内部:这value是属性还是方法?答案:看上去是无参数方法,实际上理解为一个成员变量,一个属性 ---函数式属性(方法式属性)无参数方法名字--》成员变量的名字无参数方法的返回值--》成员变量的类型这个参数叫配置参数无参数方法的类型:基本数据类型(八种),String,枚举,注解类型,还可以是以上类型对应的数组。

TheMyth142857的博客 957

【Java】注解详解

本文全面介绍了Java注解的使用,包括内置注解(如@Override、@Deprecated)、元注解(如@Target、@Retention)和自定义注解的创建与应用。内容涵盖注解的定义格式、属性设置、保留策略以及通过反射处理注解的实用技巧。通过多个代码示例展示了注解在编译检查、代码分析和运行时处理中的实际应用,帮助开发者深入理解并灵活运用Java注解机制来增强代码功能。

小昭的博客 992
上一篇: Unity3D学习1——鼠标点击效果显示
下一篇: JAVA——反射(Reflect)
a60782885
博客等级 码龄11年 97粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值