本章目标
了解Annotation的作用
掌握系统内建的三个Annotation
Annotation
J2SE 5.0提供了很多新的特性。其中的一个很重要的特性,就是对元数据(Metadata)的支持。在J2SE5.0中,这种元数据称为注释(Annotation)。通过使用注释, 程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。
Annotation可以用来修饰类、属性、方法,而且Annotation不影响程序运行,无论是否使用Annotation代码都可以使用正常的执行。
Annotation接口
java.lang.annotation.Annotation是Annotation的接口,只要是Annotation都必须实现此接口,此接口定义如下:
public interface Annotation { public Class<? extends Annotation> annotationType(); //返回此 annotation 的注释类型 public boolean equals(Object obj); public int hashCode(); String toString(); }
系统内建的Annotation
在JDK 1.5之后,系统中已经建立了如下的三个内建的Annotation类型,用户直接使用即可。
——@Override:覆写的Annotation
——@Deprecated:不赞成使用的Annotation
——@SuppressWarnings:压制安全警告的Annotation
三种内定的Annotation
@Override
@Override主要是在方法覆写的时候使用,用于保证方法覆写的正确性。下面先来看一下此注释的基本使用。
观察@Override注释的作用
class Person{//定义 Person 类 public String getInfo(){//定义 getInfo() 方法 return "这是一个 Person 类。";//返回信息 } } class Student extends Person{//子类继承父类 @Override//此处明确地指出方法覆写操作 public String getInfo(){//覆写父类的方法 return "这是一个 Student 类"; } } public class OverrideAnnotationDemo01 { public static void main(String[] args) { Person per = new Student();//通过子类实例化父类对象 System.out.println(per.getInfo());//输出信息 } /* 结果: * 这是一个 Student 类 * */ }
错误的覆写
class Person{//定义 Person 类 public String getInfo(){//定义 getInfo() 方法 return "这是一个 Person 类。";//返回信息 } } class Student extends Person{//子类继承父类 @Override//此处明确地指出方法覆写操作 public String getinfo(){//此处将方法名称写错 return "这是一个 Student 类"; } } public class OverrideAnnotationErrDemo01 { public static void main(String[] args) { Person per = new Student();//通过子类实例化父类对象 System.out.println(per.getInfo());//输出信息 } /* 结果: * 这是一个 Person 类。 * */ }
@Deprecated
@Deprecated注释的主要功能,是用来声明一个不建议使用的方法。如果在程序中使用了此方法的话,则在编译时将出现警告信息。
使用@Deprecated声明一个不建议使用的方法
class Demo{//定义 Demo 类 @Deprecated//声明不建议使用的操作 public String getInfo(){//此方法不建议用户使用 return "这是一个 Person 类。";//返回信息 } } public class DeprecatedAnnotationDemo01 { public static void main(String[] args) { Demo d = new Demo();//实例化 Demo 对象 System.out.println(d.getInfo());//编译时,将出现警告信息 } /* 结果: * 这是一个 Person 类。 * */ }
在类声明中使用@Deprecated注释
@Deprecated//定义不建议的操作 class Demo{//此类不建议用户使用 public String getInfo(){//取得信息 return "这是一个 Person 类。";//返回信息 } } public class DeprecatedAnnotationDemo02 { public static void main(String[] args) { Demo d = new Demo();//编译时,将出现警告信息 System.out.println(d.getInfo());//输出信息 } /* 结果: * 这是一个 Person 类。 * */ }
@SuppressWarnings
@SuppressWarnings注释的主要功能是用来压制警告,例如,之前讲解泛型操作的时候,如果在一个类声明时没有指明泛型的话,则肯定在编译时将产生,那么此时就可以使用@SuppressWarnings压制住这种警告。
压制一个警告
class Demo<T>{//定义 Demo 类,使用泛型 private T var;//定义泛型变量 public T getVar() {//取得泛型变量的内容 return var; } public void setVar(T var) {//设置泛型变量 this.var = var; } } public class SupperssWarningsAnnotationDemo01 { @SuppressWarnings("unchecked")//压制主方法的警告信息 public static void main(String[] args) { Demo d = new Demo();//编译时,将出现警告信息,但此时警告被压制 d.setVar("chaoyi"); System.out.println("内容:"+d.getVar());//输出 } /* 结果: * 内容:chaoyi * */ }
压制多个警告
@Deprecated // 以下操作不建议使用 class Demo<T>{ // 定义Demo类,使用泛型 private T var ; // 定义泛型变量 public T getVar() { // 取得泛型变量的内容 return var; } public void setVar(T var) { // 设置泛型变量 this.var = var; } } public class SuppressWarningsAnnotationDemo02 { @SuppressWarnings({ "unchecked", "deprecation" })// 此时,压制两条警告 public static void main(String[] args) { Demo d = new Demo() ; // 编译时的警告信息将被压制 d.setVar("chaoyi") ; System.out.println("内容:"+d.getVar()) ; // 输出 } /*结果: * 内容:chaoyi * */ }
@SuppressWarnings中的关键字
在设置注释信息的时候,是以keyàvalue的形式出现的,所以以上的@SuppressWarnings也可以直接使用“value={"unchecked',"deprecation'}”的方式设置
另一种形式的@SuppressWarnings
@Deprecated // 以下操作不建议使用 class Demo<T>{ // 定义Demo类,使用泛型 private T var ; // 定义泛型变量 public T getVar() { // 取得泛型变量的内容 return var; } public void setVar(T var) { // 设置泛型变量 this.var = var; } } public class SuppressWarningsAnnotationDemo02 { @SuppressWarnings(value = { "unchecked", "deprecation" })// 此时,压制两条警告 public static void main(String[] args) { Demo d = new Demo() ; // 编译时的警告信息将被压制 d.setVar("chaoyi") ; System.out.println("内容:"+d.getVar()) ; // 输出 } /*结果: * 内容:chaoyi * */ }
相关推荐
- `@NonNull`(非JDK内建,但常见于库如JSR 305): 表示变量或参数不应为null,某些IDE和静态分析工具会使用此信息进行检查。 3. **注解的工作原理** 注解信息被编译器保存在字节码文件中,可以通过反射API访问。...
031601_【第16章:Annotation】_系统内建Annotation笔记.pdf 031602_【第16章:Annotation】_自定义Annotation笔记.pdf 031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_...
- **4.1.2 内建约束**:Hibernate 验证器内置了一些常见的约束注解,如 `@NotNull`、`@Size` 等。 - **4.1.3 错误信息**:可以通过 `@Constraint` 注解的 `message` 属性来定义约束违反时的错误消息。 - **4.1.4 ...
- **内建约束**:如 `@NotNull`, `@Size`, `@Pattern` 等。 - **错误信息**:可以通过 `message` 属性来自定义验证失败时显示的消息。 - **编写你自己的约束**:可以创建自定义约束注解,并实现相应的约束验证...
noear框架内建了缓存机制,支持本地缓存和分布式缓存,可以对查询结果进行缓存,降低系统负载,提高响应速度。 **监控功能** 对于生产环境,监控系统的运行状态至关重要。noear微型ORM框架具备监控能力,可以实时...
其主要目标是方便开发人员运用DDD和CQRS思想来构建复杂的、可扩展的应用系统。该框架提供了最核心的构建块的实现,比如Aggregate、Repository和Event。此外,该框架支持与Spring集成,提供使用annotation的方式让...
【基于Java的快速建站框架实现】的开题报告探讨了如何通过Grosbeak框架提升Java在小型系统上的开发效率。Grosbeak是一个针对Java的轻量级Web开发框架,旨在解决Java在构建小型系统时效率低下的问题。这个框架集成了...
自定义注解通常包含一系列的元数据,它们可以被编译器或运行时系统读取并执行相应的处理。 创建自定义注解需要定义一个注解类型,例如: ```java import java.lang.annotation.ElementType; import java.lang....
对象系统object.c 弦键t_string.c 列表建t_list.c 哈希键t_hash.c 集合键t_set.c 有序集合键t_zset.c(除zsl开头的所有函数) HyperLogLog键hyperloglog.c(pf开头的函数) 地理位置geo.h,geo.c 三,Redis数据库 ...
【音视频编解码与ELAN自建汉语方言多媒体语料库】 音视频技术是现代信息技术中的重要组成部分,尤其在语言学研究、教育、娱乐等领域发挥着关键作用。编解码是音视频处理的核心,涉及将音频和视频信号转换成数字格式...
进一步,课程进入J2EE中级阶段,学员将学习JavaScript、XML、HTML和CSS的基础,以及JSP内建对象和各种应用服务器的配置和部署,比如JBOSS、WebLogic和Tomcat。数据库知识也是这一阶段的重点,包括SQL语言、Oracle...
iOS设备内建了GPS硬件,可以通过CoreLocation框架获取用户的位置信息。开发者需要在Info.plist文件中声明使用定位服务的权限,并通过CLLocationManager对象来管理定位服务。启动定位服务后,可以监听用户的实时位置...
JDK 5.0引入了内建类型与对应的包装类型之间的自动转换,简化了代码编写,如`Integer i = 5;`。 十、NIO.2(New IO 2.0) JDK 7引入了NIO.2,扩展了JDK 5.0的非阻塞I/O模型,提供了更强大的文件系统操作和异步I/O...
- **内置验证**:Java提供了内建的验证机制,如`java.lang.annotation`包中的`@NotNull`, `@Size`, `@Pattern`等注解,配合JSR 303/JSR 349(Bean Validation)框架,可以在字段级别定义验证规则。 - **自定义验证...
这个压缩包“DataEase数据可视化分析工具 v2.3.0.zip”包含了该软件的源码以及必要的文档资源,对于计算机专业的学生进行毕业设计或论文研究,以及对系统软件工具感兴趣的开发者来说,都是非常宝贵的参考资料。...
Built-in:内建、内置,指的是某个内建或内置的组件或功能。 Business:业务、商务(看场合),指的是某个业务或商务操作。 Business Logic:业务逻辑,指的是某个业务或商务逻辑或规则。 Business Rules:业务规则...