1.1 什么是注解
注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:
注解Annotation是从JDK5.0开始引入。
虽然说注解也是一种注释,因为它们都不会改变程序原有的逻辑,只是对程序增加了某些注释性信息。不过它又不同于单行注释和多行注释,对于单行注释和多行注释是给程序员看的,而注解是可以被编译器或其他程序读取的一种注释,程序还可以根据注解的不同,做出相应的处理。所以注解是插入到代码中以便有工具可以对它们进行处理的标签。
1.2 三个最基本的注解
1、@Override
用于检测被修饰的方法为有效的重写方法,如果不是,则报编译错误!
只能标记在方法上。
它会被编译器程序读取。
2、@Deprecated
用于表示被标记的数据已经过时,不建议使用。
可以用于修饰 属性、方法、构造、类、包、局部变量、参数。
它会被编译器程序读取。
3、@SuppressWarnings
抑制编译警告。
可以用于修饰类、属性、方法、构造、局部变量、参数
它会被编译器程序读取。
示例代码:
import java.util.ArrayList;
public class TestAnnotation {
1.3 JUnit
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
要使用JUnit,必须在项目的编译路径中必须引入JUnit的库,即相关的.class文件组成的jar包。如何把JUnit的jar添加到编译路径如图所示:
后面会学习maven,在maven仓库中统一管理所有第三方框架和工具组件的jar,但是现在没有学习maven之前,可以使用本地jar包。
1、引入本地JUnitjar
第一步:在当前IDEA项目目录下建立junitlibs,把下载的JUnit的相关jar包放进去:
第二步:在项目中添加Libraries库
第三步:选择要在哪些module中应用JUnit库
第四步:检查是否应用成功
注意Scope:选择Complie,否则编译时,无法使用JUnit。
第5步:下次如果有新的模块要使用该libs库,这样操作即可
2、编写和运行@Test单元测试方法
JUnit4版本,要求@Test标记的方法必须满足如下要求:
-
所在的类必须是public的,非抽象的,包含唯一的无参构造的。
-
@Test标记的方法本身必须是public,非抽象,非静态的,void无返回值,()无参数的。
import org.junit.Test;
public class TestJUnit {
3、设置执行JUnit用例时支持控制台输入
在idea64.exe.vmoptions配置文件中加入下面一行设置,重启idea后生效。
需要注意的是,要看你当前IDEA读取的是哪个idea64.exe.vmoptions配置文件文件。如果在C盘的用户目录的config下(例如:C:\Users\Irene\.IntelliJIdea2019.2\config)也有一个idea64.exe.vmoptions文件,那么将优先使用C盘用户目录下的。否则用的是IDEA安装目录的bin目录(例如:D:\ProgramFiles\JetBrains\IntelliJ_IDEA_2019.2.3\bin)下的idea64.exe.vmoptions文件。
-Deditable.java.test.console=true
注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:
注解Annotation是从JDK5.0开始引入。
虽然说注解也是一种注释,因为它们都不会改变程序原有的逻辑,只是对程序增加了某些注释性信息。不过它又不同于单行注释和多行注释,对于单行注释和多行注释是给程序员看的,而注解是可以被编译器或其他程序读取的一种注释,程序还可以根据注解的不同,做出相应的处理。所以注解是插入到代码中以便有工具可以对它们进行处理的标签。
一个完整的注解应该包含三个部分: (1)声明 (2)使用 (3)读取
1 元注解
JDK1.5在java.lang.annotation包定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。
(1)@Target:用于描述注解的使用范围
-
可以通过枚举类型ElementType的10个常量对象来指定
-
TYPE,METHOD,CONSTRUCTOR,PACKAGE.....
(2)@Retention:用于描述注解的生命周期
-
可以通过枚举类型RetentionPolicy的3个常量对象来指定
-
SOURCE(源代码)、CLASS(字节码)、RUNTIME(运行时)
-
==唯有RUNTIME阶段才能被反射读取到==。
(3)@Documented:表明这个注解应该被 javadoc工具记录。
(4)@Inherited:允许子类继承父类中的注解
示例代码:
package java.lang;
import java.lang.annotation.*;
package java.lang;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
package java.lang;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
2 自定义注解
1、声明自定义注解
【元注解】
【修饰符】 @interface 注解名{
【成员列表】
}
-
自定义注解可以通过四个元注解@Retention,@Target,@Inherited,@Documented,分别说明它的声明周期,使用位置,是否被继承,是否被生成到API文档中。
-
Annotation 的成员在 Annotation 定义中以无参数有返回值的抽象方法的形式来声明,我们又称为配置参数。返回值类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、以上所有类型的数组
-
可以使用 default 关键字为抽象方法指定默认返回值
-
如果定义的注解含有抽象方法,那么使用时必须指定返回值,除非它有默认值。格式是“方法名 = 返回值”,如果只有一个抽象方法需要赋值,且方法名为value,可以省略“value=”,所以如果注解只有一个抽象方法成员,建议使用方法名value。
import java.lang.annotation.*;
import java.lang.annotation.*;
2、使用自定义注解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器