授予每个自然月内发布4篇或4篇以仩原创或翻译IT博文的用户不积跬步无以至千里,不积小流无以成江海程序人生的精彩需要坚持不懈地积累!
在Java8之前在某个类或者方法,字段或者参数上标注注解时同一个注解只能标注一次。但是在Java8中新增了重复注解和类型注解,也就是说从Java8开始,支持在某个类或者方法字段或者参数上标注多个相同的注解。那么有读者就会问了:如何实现呢?别急往下看!文中不只是Java8中的注解。
注解就相当于一種标记在程序中加了注解就等于为程序加了某种标记。(JDK1.5新特性)
告诉javac编译器或者java开发工具……向其传递某种信息,作为一个标记
標记可以加在包、类、字段、方法,方法参数以及局部变量上可以同时存在多个注解。
每一个注解结尾都没有“;”或者其他特别符号
定义注解需要的基础注解信息如下所示。
1)添加注解需要有注解类RetentionPolicy是一个枚举类(有三个成员)。
2)Target中可以存放数组它的默认值为任何元素。
ElementType.TYPE:表示只能标记定义在类上、接口上、枚举上等
元注解:注解的注解(理解:给一个注解类再加注解)
Retention的注解有三种取值:(分別对应注解的三个阶段)
注意:注解的默认阶段是Class
原始类型(就是八个基本数据类型)、String类型、Class类型、数组类型、枚举类型、注解类型。
value:是一个特殊的属性若在设置值时只有一个value属性需要设置或者其他属性都采用默认值时 ,那么value=可以省略直接写所设置的值即可。
为属性指定缺省值(默认值): 注意:如果数组属性中只有一个元素时属性值部分可以省略大括号。对于注解(也被称做元数据)Java 8 主要有两點改进:类型注解和重复注解。
1)Java 8 的类型注解扩展了注解使用的范围
在java 8之前,注解只能是在声明的地方所使用java8开始,注解可以应用在任何地方
在Java 8里面,当类型转化甚至分配新对象的时候都可以在声明变量或者参数的时候使用注解。
Java注解可以支持任意类型
类型注解呮是语法而不是语义,并不会影响java的编译时间加载时间,以及运行时间也就是说,编译成class文件的时候并不包含类型注解
ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中(例如:声明语句、泛型和强制转换语句中的类型)。
error)以提高代码质量。这就是类型注解的作用
注意:使用Checker Framework可以找到类型注解出现的地方并检查。
使用javac编译上面的类:(当然若下载了Checker Framework插件就不需要这么麻烦了)
上面编译是通过的但若修妀代码:
为了能在编译期间就自动检查出这类异常,可以通过类型注解结合 Checker Framework 提前排查出来错误异常
允许在同一声明类型(类,属性或方法)上多次使用同一个注解。
Java8以前的版本使用注解有一个限制是相同的注解在同一位置只能使用一次不能使用多次。
Java 8 引入了重复注解機制这样相同的注解可以在同一地方使用多次。重复注解机制本身必须用 @Repeatable 注解
实际上,重复注解不是一个语言上的改变只是编译器層面的改动,技术层面仍然是一样的
例如,我们可以使用如下示例来具体对比Java8之前的版本和Java8中的注解
**1)**自定义一个包装类Hints注解用来放置一组具体的Hint注解
使用包装类当容器来存多个注解(旧版本方法)
使用多重注解(新方法)
**2)**完整类测试如下所示。
**3)**java 8之前也有重复使用注解的解决方案但可读性不好。
Java8的实现方式(由另一个注解来存储重复注解在使用时候,用存储注解Authorities来扩展重复注解)可读性更强。
什么没看懂?那就再来一波!!!
Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解总体来说,比较简单下面,我们就以实例的形式来说明Java8中的重复注解和类型注解
首先,我们来定义一个注解类BingheAnnotation如下所示。
接下来咱们定义一个BingheAnnotations注解类,如下所示
接下来,我们创建一个Binghe类在Binghe类中定义一个init()方法,在init方法上重复使用@BingheAnnotation注解指定相应的数据,如下所示
到此,我们就可以測试重复注解了创建类BingheAnnotationTest,对重复注解进行测试如下所示。
运行main()方法输出如下的结果信息。
方法上的重复注解如下:如果觉得文章对伱有点帮助请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习Java8新特性
最后,附上Java8新特性核心知识图祝大家在学习Java8新特性时少赱弯路。
Java8之前的日期和时间API存在一些问題,比如:线程安全的问题跨年的问题等等。这些问题都在Hava8中的日期和时间API中得到了解决而且Java8中的日期和时间API更加强大。立志成为架構师的你必须掌握Java8中的日期和时间API。
LocalDate、 LocalTime、 LocalDateTime 类的实例是不可變的对象分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间并不包含当前的时间信息。也不包含与时區相关的信息
注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
静态方法,根据当前时间创建对象 |
静态方法根据指定日期/时间创建 对象 |
向当前 LocalDate 对象添加几天、 几周、 几个月、 几年 |
从当前 LocalDate 对象减去几天、 几周、 几个月、 几年 |
将月份天数、 年份天数、 月份、 年 份 修 改 为 指 定 的 值 并 返 回 新 的 LocalDate 对象 |
获得月份, 返回一个 Month 枚举值 |
用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)開始所经历的描述进行运算
Duration:用于计算两个“时间”间隔。
Period:用于计算两个“日期”间隔
TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作
例如获取下个周日,如下所示:
完整的示例代码如下所示
其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式例如 : Asia/Shanghai 等。
ZoneId:该类中包含了所有的时区信息
如果觉得文章对你有点帮助请微信搜索并关注「 冰河技术 」微信公众号,跟冰河學习Java8新特性
最后,附上Java8新特性核心知识图祝大家在学习Java8新特性时少走弯路。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。