在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Java主要提供了5个标准注解,分别是:Override、Deprecated、SuppressWarnings、SafeVarargs和FunctionalInterface。本文将从“如何使用这5个标准注解”,还有编译器在编译时:“如何处理它们”来讲述。一起来看Java标准注解的学习总结吧!

1、Override
注解就是标记,而标记就是描述一个功能,那么Override这个标准注解的功能就是重写父类方法。大家可以先复习一下关于Java继承的概念,我们如果在某个方法上加上这个注解,就表示该方法继承并重写父类的同名方法,如下所示:
public class ParentClass {
public void hello() {
System.out.println("Hello World!");
}
}
public class SubClass extends ParentClass {
@Override
public void hello() {
System.out.println("Hello Java!");
}
}
上边是父类ParentClass,里面包含一个方法hello(),下边是ParentClass的子类SubClass,子类 SubClass里也有一个同名的方法hello(),该方法上面出现了Override注解,说明该hello方法重写了父类的hello方法。当编译器编译代码时如果发现Override标记的方法名和重写的父类方法名不一致就会告警。
2、Deprecated
Deprecated注解的功能就是标记一个元素(类、方法或类成员属性)为已过期。所以,我们如果在识别为过期的类、方法或类成员属性上加上这个标记,就表示该类、方法或属性已经废弃。如下所示:
public class DeprecatedDemo {
@Deprecated
public void hello() {
System.out.println("Hello World!");
}
}
hello方法上出现了Deprecated注解,说明该方法已过期(废弃)。当编译器编译时遇到了使用@Deprecated修饰的类、方法或属性时就会提示元素过期的警告信息。
3、SuppressWarnings
SuppressWarnings的功能就是抑制编译器编译时产生警告信息,其中该注解可以使用以下几个属性来抑制告警信息:
所以,假设我们在某个方法或者类成员属性上加上这样的标记,就像下面这样:
public class SuppressWarningDemo {
@SuppressWarnings("unchecked")
publicMapcast() {
Object obj = new Object();
return (HashMap<String, String>) obj;
}
}
cast方法上出现SuppressWarning注解,同时,注解属性为unchecked,表示忽略方法内出现了未经类型检查的obj对象强制转换成HashMap结构的情况。@SuppressWarnings(“unchecked”),就是让编译器在编译时发现该方法或语句为unchecked未经类型检查的转换时,忽略告警。注解的其他属性类似。
4、SafeVarargs
SafeVarargs是从JDK1.7以后才引入的标准注解,从字面上理解,它的功能就是对方法内非类型安全的变量操作进行告警。我们在某个方法上加上这样的标记,如下所示:
public class SafeVarargs {
@SafeVarargs
public static void m(List<String>...lists) {
Object[] array = lists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList;
String s = lists[0].get(0);
}
}
因为array变量是一个Object类型,是不确定明确数据类型的,而tmpList变量是一个明确Integer的List类型,所以,当把tmpList赋值给array时,就是把明确类型变量赋值给不明确类型的变量,SafeVarargs作用就是忽略这种警告。所以,当编译器编译发现一个方法上标记了SafeVarargs注解,就会忽略该方法内非类型安全的变量操作的告警。
5、FunctionalInterface
FunctionalInterface是JDK1.8之后新增的标准注解,它的功能就是检查被标记的接口是否是一个函数接口。
如下所示:
@FunctionalInterface
public interface FunctionalInterfaceDemo {
void hello();
}
上面的接口类FunctionalInterfaceDemo被标记了FunctionalInterface注解,表示该类里面的接口方法hello()实现必须是函数式编程,如果不是,就会出现告警。所以,顾名思义,当编译器编译发现一个接口类上标记了FunctionalInterface注解,就会检查该接口类的接口方法实现是否为函数式编程,如果不是,编译器就会产生警告信息。
好了,讲到这里,我们就把Java的5个标准注解全部学习完了。大家觉得本文的学习总结好理解吗?如果本文对你有帮助,欢迎大家转发并收藏!
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java基础面试题 Object类中Hashcode 和 equals区别与联系是什么?
equals Object 类中默认的实现方式是 : return this == obj 。那就是说,只有 this 和 obj 引用同一个对象,才会返回 true。Hashcode这个方法返回对象的散列码,返回值是 int 类型的散列码。
9915
2019-06-03 16:36:48
JavaWeb核心技术课程项目实战
JavaWeb就是用Java技术来解决相关Web领域的技术总和,包括Web服务器和Web客户端两部分。Java的Web框架有很多种,虽然各不相同,但基本也都是遵循特定的路数的。使用Servlet或者Filter拦截请求,使用MVC的四项设计架构,使用约定、XML或Annotation实现配置,运用Java面向对象的特点实现请求和相应的流程。
8327
2019-07-22 15:07:55
转行学Java后悔了怎么办?如何调整职业方向?
不少人辞去工作转行学Java,没学会转行学Java后悔了。在学习过程中发现自己并不适合做编程,感到后悔怎么办呢?工作没有了,又花费了时间和经历转行没成功。有的人转行是真的喜欢,在转行前做了很多准备下定决心去学习;而有的人转行学Java很盲目,看别人学完找到高薪工作自己也想学,并不是真的喜欢,这两种心态就决定了前者更容易获得成功。
12064
2020-01-16 11:05:04
Java语言适合零基础入门为什么?
很多人在选择入门IT行业,不知道自己适合学习哪一门编程语言,也不知道哪一门语言的发展前景好。编程语言有很多种,但选择一门编程语言非常值得认真考虑的,选太容易的担心后面学其他的语言会很难,选太难的话又担心自己不会,不少人选择性Java入门,Java语言好在哪儿呢?
5134
2020-07-29 11:11:29
MySQL常见问题及答案汇总
MySQL是一种开放源代码的关系型数据库管理系统。数据库按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
4808
2020-12-23 14:30:08
