网站首页 > java教程 正文
Java主要提供了5个标准注解,分别是:
Override
Deprecated
SuppressWarnings
SafeVarargs
FunctionalInterface
本文将从“如何使用这5个标准注解”,还有编译器在编译时“如何处理它们”来讲述。下面,和黑马君一起来看Java标准注解的学习总结吧!
Java标准注解
1、Override
注解就是标记,而标记就是描述一个功能,那么Override这个标准注解的功能就是重写父类方法。我们如果在某个方法上加上这个注解,就表示该方法继承并重写父类的同名方法,如下所示:
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注解,就会检查该接口类的接口方法实现是否为函数式编程,如果不是,编译器就会产生警告信息。
猜你喜欢
- 2024-10-06 收藏!用了一个月整理java(理论,进阶,实战)附完整视频
- 2024-10-06 为什么要避免在Java中使用异常作为控制流?
- 2024-10-06 Java 是一种广泛使用的编程语言,具有以下特点
- 2024-10-06 5个用例帮你全面了解Java泛型应用
- 2024-10-06 Java 工程师相见恨晚的神兵利器和使用技巧
- 2024-10-06 7个维度+43条使用规范,带你彻底玩转Redis
- 2024-10-06 java的方法,方法的定义格式,方法的重载
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)