Java注解入门

简介: Java注解入门

1.注解的支持

Java从1.5开始使用注解,在1.5及更高的Java版本中都可以使用注解。

2.Java内置注解

Java在1.5中内置了三种标准注解,这三中注解分别为:

@Override:表示当前方法将会覆盖超类(父类)中的该方法。


@Deprecated:该注解表示,使用了该注解的方法是不被赞成使用的,在编译器中使用带有该注解的方法时将会出现提示(方法名称中间会有一个中划线)。


@SuppressWarnings:该注解会关闭编译器的不正当禁告。

3.编写注解要使用的注解——————元注解

Java专门提供了四种注解来让我们编写新的注解,这四个注解被称为元注解,这四种注解为:

@Documented:该注解表示新编写的注解是否包含在JavaDoc文档中,没有参数,添加该注解,在导出javadoc文档时回将该注解导出到javadoc文档中。


@Inherited:该注解表示本注解是否允许被它的子类所继承。


@Target:表示注解使用的地方,对注解进行使用限制,该注解有参数,参数的取值为ElementType的静态常量值,取值可以有多个,多个的写法为 @Target({ElementType.FIELD,ElementType.TYPE})格式。


  ElementType的静态常量值有:

    CONSTRUCTOR:构造器声明。

    FIELD:域的声明(包括 enum的实例)。

    LOCAL_VARIABLE:局部变声明。

    PACKAGE:包声明。

    PARAMETER:参数声明。

    TYPE:类、接口(包括注解类型)或enum声明。


@Retention:该注解表示此注解的保存级别,表示什么时候该注解将被抛弃,该注解有参数,参数的取值为RetentionPolicy的静态常量值,该注解不允许多取值,只允许有一个值。

  RetentionPolicy的静态常量值有:

  SOURCE:表示该注解只会在源代码文件中存在,编译成class文件时将被抛弃。

  CLASS:表示该注解在class文件中将存在,在加载到VM中时将被抛弃。

  RUNTIME:在VM中将保存该注解,在程序运行时可以通过反射的方式来获取注解的信息。

4.注解的编写方式:

注解的编写方式类似于接口的编写方式,只是要在interface关键字的前面加上@符号即可,然后在上方注解需要的元注解信息,


注解的参数编写方式:参数可以是单个,也可以有多个。也可以没有参数。如果一个参数需要同时有多个取值,则需要将该注解定义为数组的形式。声明参数时,参数后面必须要带有括号。示例如下:

@Documented@Inherited@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public@interfaceController {
Stringvalue() default"";
String[] type() ;
    }

5.反射获取注解信息

如果注解的@Retention注解的取值为RetentionPolicy.RUNTIME,则在程序运行时可以通过反射的方式来获取注解的信息。


在项目运行时,我们可以使用类的全限定名(包名+"."+类名)来反射得到类对象。


然后通过类对象的isAnnotationPresent方法根据注解类的class来判断该类是否有特定的注解,如果有我们特定的注解,则可以通过类对象的getAnnotation方法根据注解类的class来获取该注解类的对象实例,然后使用注解类对象实例的参数来获取注解的参数值。

示例代码:

Class<?>clazz=Class.forName("com.jack.controller.CustomerController");//根据类的全限定名获取类对象。if(clazz.isAnnotation(Controller.class)){ //判断该类中是否有Controller注解。Controllercon=clazz.getAnnotation(Controller.class);//根据类的class来获取类的对象。Stringvalue=con.value();
String[] type=con.type();
  }

6.反射说明

在Java中可以通过反射的方法来获取Java的类对象和类对象中的属性以及方法。

第一步:根据类的全限定名(包名+"."+类名)来获取类的class对象。

Class<?>clazz=Class.forName("com.jack.controller.CustomerController");

第二步:根据类的class对象获取类的实例。

Objectobject=clazz.newInstance();

第三步:根据class对象获取类的构造方法。

// 1.获取该类的全部构造方法Constructor<?>[] constructor=object.getClass().getDeclaredConstructors();
//2.根据构造方法的参数类型来获取指定的构造方法。//获取空构造Constructor<?>constructor2=clazz.getDeclaredConstructor(); 
//获取只有一个String类型的参数的构造方法。Constructor<?>constructor2=clazz.getDeclaredConstructor(String.class);

第四步:根据class对象获取该类的方法。

//1.获取该类的全部方法Method[] methods=clazz.getDeclaredMethods();
//2.根据方法的名称和参数类型来获取指定的方法。//第一个参数为方法的名称,第二个参数为可变参数,接受方法的参数类型的class对象。Methodmethod=clazz.getDeclaredMethod("sayHello", null);

第五步:根据class对象获取类的成员变量。

//1.获取该类的所有成员变量Field[] fieldss=clazz.getDeclaredFields();
//2.根据成员变量的名称来获取指定的成员变量。Fieldfieldss=clazz.getDeclaredFields(变量名称);

第六步:类的实例化

使用第二步的方法实例化类的时候要求类必须要有一个无参构造方法,如果该类没有无参构造方法,则必须先根据class对象获取 该类的所有构造方法,或者获取特定的构造方法,然后使用构造方法来实例化该对象。

Constructor<?>constructor2=clazz.getDeclaredConstructor(String.class);
Objectobject=constructor2.newInstance(String类型的变量值);

第七步:给成员变量赋值。

获取到成员变量后可以给成员变量赋值。赋值使用成员变量Field的set方法来进行,set方法接受两个参数,第一个参数为该变量所在的类的对象,第二个参数为你要赋值的值,如果该成员变量时是私有的,那么在赋值之前必须要对该成员变量设置为支持赋值,该操作只需要设置该成员变量的setAccessible方法为true即可。

//1.获取类对象Objectobject=clazz.newInstance();
//2.根据成员变量名称获取指定的成员变量。Fieldfield=clazz.getDeclaredField(成员变量名称);
//3.设置成员变量可赋值field.setAccessible(true);
//4.给该成员变量赋值field.set(obj,要赋值给变量的值)

第八步:对象方法的调用。

通过class对象拿到该类所有的方法之后,可以通过调用方法的invoke方法来执行该方法,该方法有两个参数,第一个参数为该方法所在的类的对象,第二个参数为可变参数,接受该方法所需要的所有参数。

//1.获取类对象Objectobject=clazz.newInstance();
//2.根据方法名称和参数类型获取指定的方法Methodmethod=clazz.getDeclaredMethod("sayHello", String.class);
//3.调用该方法method.invoke(object,"hello");
目录
打赏
0
0
0
1
79
分享
相关文章
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
117 34
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
81 5
2025 年 Java 核心技术从入门到精通实战指南
《2025年Java核心技术实战指南》全面覆盖Java开发的最新趋势与最佳实践。内容包括Java新特性(如模式匹配、文本块、记录类)、微服务架构(Spring Boot 3.0+、Spring Cloud)、响应式编程(Reactor、WebFlux)、容器化与云原生(Docker、Kubernetes)、数据访问技术(JPA、R2DBC)、函数式编程、单元测试与集成测试(JUnit 5、Mockito)、性能优化与监控等。通过实战案例,帮助开发者掌握构建高性能、高可用系统的技能。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
120 7
2025 版 Java 学习路线实战指南从入门到精通
《Java学习路线实战指南(2025版)》是一份全面的Java开发学习手册,涵盖基础环境搭建、核心语法与新特性、数据结构与算法、微服务架构、云原生技术栈、AI融合及项目实战。内容包括JDK安装配置、IntelliJ IDEA设置、Records类与模式匹配增强、LeetCode题解、Spring Cloud微服务开发、Kubernetes部署、OpenAI API调用等。结合在线商城系统案例,采用Vue 3、Spring Boot 3.5、MySQL、Elasticsearch等技术,提供从理论到实践的完整路径,助力开发者掌握2025年最新趋势与最佳实践。
153 4
java 入门学习视频_2025 最新 java 入门零基础学习视频教程
《Java 21 入门实操指南(2025年版)》提供了Java最新特性的开发指导。首先介绍了JDK 21和IntelliJ IDEA 2025.1的环境配置,包括环境变量设置和预览功能启用。重点讲解了Java 21三大核心特性:虚拟线程简化高并发编程,Record模式优化数据解构,字符串模板提升字符串拼接可读性。最后通过图书管理系统案例,展示如何运用Record定义实体类、使用Stream API进行数据操作,以及结合字符串模板实现控制台交互。该指南完整呈现了从环境搭建到实际项目开发的Java 21全流程实
47 1
Java 从入门到实战完整学习路径与项目实战指南
本文详细介绍了“Java从入门到实战”的学习路径与应用实例,涵盖基础、进阶、框架工具及项目实战四个阶段。内容包括环境搭建、语法基础、面向对象编程,数据结构与算法、多线程并发、JVM原理,以及Spring框架等核心技术。通过学生管理系统、文件下载器和博客系统等实例,帮助读者将理论应用于实践。最后,提供全链路电商系统的开发方案,涉及前后端技术栈与分布式架构。附代码资源链接,助力成为合格的Java开发者。
49 4
|
27天前
|
Java 异步编程难题拆解实操指南:从入门到精通解决异步编程关键问题
本文深入探讨了Java异步编程的实操技巧,基于Project Reactor与Spring WebFlux等技术框架,通过具体案例解决常见难题。内容涵盖反应式编程基础、回调地狱解决方案、并行任务处理、响应式REST API开发、背压策略应用、微服务异步通信及性能监控等方面。结合代码示例,详细讲解了如何构建高性能异步应用,并总结了最佳实践,帮助开发者掌握异步编程的核心技能。适合希望提升异步开发能力的技术人员阅读。
42 3
2025 年全网超全 Java 从入门到精通学习路线指南
这是一份全面的Java学习路线图,涵盖从基础到进阶的知识体系。基础阶段包括环境搭建、语法学习与面向对象编程;进阶阶段深入数据结构、多线程、JVM原理及泛型集合;框架阶段掌握Spring、MyBatis等工具;数据库阶段学习SQL、MySQL及Redis;前端技术涉及HTML、CSS与Vue;分布式阶段探讨微服务架构、Docker与Kubernetes;最后通过企业级项目实战提升性能优化与代码重构能力。资源地址:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
458 7
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
85 0
最新 Java 从入门到实战技术实操指南
这是一份全面的Java实操指南,涵盖从入门到微服务架构的完整学习路径。内容包括Java 21新特性(虚拟线程、Record类)、响应式编程(Spring WebFlux)、微服务架构(Spring Boot 3.2、Spring Cloud、Kubernetes)、数据库与缓存(Redis 8、R2DBC)以及云原生部署和监控(Prometheus、Grafana)。通过电商系统实战项目,掌握最新技术栈与开发技巧。适合初学者及进阶开发者,附带代码示例与资源链接,助你快速提升技能。
40 0

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等