Java新特征学习
来源:互联网 发布:淘宝代运营公司收费 编辑:程序博客网 时间:2024/06/05 11:38
Java新特征学习
一. try-with-resources jdk1.7
前
后
二. JDK 8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。jdk 8
三. lambda表达式(lambda expressions) jdk8
对map的循环遍历,
四. map的新用法
还有上文的遍历
五 Java.util.Objects JDK 1.7
里面封装了一些常用操作如compare、equals/deepEquals、hash/hashCode、isNull/nonNull、requiredNonNull、toString这12个常用方法。
六 , Optional 类 jdk8 解决NPE问题 (2017年7月19日21:08:53 ) 日后
http://blog.csdn.net/hj7jay/article/details/52459334
https://github.com/winterbe/java8-tutorial#default-methods-for-interfaces
java8 新特性学习(根据上面github)
1、 接口的default方法
默认实现,其子类自动继承其代码,但重写后有各自的实现
2、Lambda表达式
总结来说 : 就是实现接口方法,直接参数->方法体(或 对象::对象的方法)其中 new字代表构造方法
其他代表 执行方法,但是当写成 from,就解析不了多个方法参数了
如果 lambda表达式范围内访问成员变量,必须为final ,虽然没有强制必须显示声明final
但你改了会报错,如下
接口中的d efault方法不能使用lambda表达式
内置的lambda 表达式接口有
Predicate
Function
Suppliers
Consumers
Comparators
Runnables
Callables
不过这么做有什么意义呢? 不如直接调用方法
断言接口(Predicates)、功能接口(Functions)、供应接口(Suppliers)、消费接口(Consumers)、比较接口(Comparators)、选项接口(Optionals)。
http://blog.csdn.net/gdouchufu/article/details/29235975
用法可能是更好支持了函数式编程,但现在还理解不来其好处。如下
要改代码,直接改 callable的实现就可以。
相当于更加简单了代码, 不用写很多接口了
感觉还是不太好用
foreach 挺方便
3、流 .stream() 还不错,很强大
对集合的过滤,筛选,修改元素 等等,执行操作后转移集合元素
代码全需要好好看看, 掌握,很不错 。
github上 stream代码
parallelStream() 并行流,时间少点
其中reduce 方法比较难以理解,网上博客
http://blog.csdn.net/io_field/article/details/54971679
说是处理并发
既然是流,就有关闭,java虽然给了权限关闭,但是当执行完一个流方法后会再执行流方法就会报出错误
stream has already been operated upon or closed
.filter 和 .sorted 两个方法,如果 filter 后有sorted ,则会打乱filter的顺序,会先不返回符合的stream。
其他情况正常, 会先匹配后返回符合的stream,进行接下来的代码,然后再回来接着匹配
map也同filter一样。
flatMap 将一个流转化为另一个流如下
分类
使用flatMap
得到所有article中的tag的流,然后调用collect转化为不可重复的set
好好看看java8 的steam intStream 等相关类,流操作集合,操作循环,再用上lambda
Stream 11 有点看不懂 Stream12的多线程会打乱顺序,但时不影响执行结果
4、 LocalDate LocalDateTime LocalTime
5、一个注解@Repeatable()
可以出现重复注解 ,在注解hints中有一个hint数组注解
@Repeatable(Hints.class) 指向数组注解 ,得到两个注解的方式有两种
复习注解
@FunctionalIterface 这是Java1.8 新增的注解,用于约定函数式接口。
元注解
1、@Target 表示能放在什么位置,类、方法、属性
ElementType.TYPE:能修饰类、接口或枚举类型
ElementType.FIELD:能修饰成员变量
ElementType.METHOD:能修饰方法
ElementType.PARAMETER:能修饰参数
ElementType.CONSTRUCTOR:能修饰构造器
ElementType.LOCAL_VARIABLE:能修饰局部变量
ElementType.ANNOTATION_TYPE:能修饰注解
ElementType.PACKAGE:能修饰包
2、@Retention 表示生命周期
RetentionPolicy.SOURCE: 注解只在源代码中存在,编译成class之后,就没了。@Override 就是这种注解。
RetentionPolicy.CLASS: 注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。@Retention的默认值,即当没有显示指定@Retention的时候,就会是这种类型。
RetentionPolicy.RUNTIME: 注解在运行起来之后依然存在,程序可以通过反射获取这些信息,
3、@Inherited 表示该注解具有继承性
4、@Documented 如图所示,在用javadoc命令生成API文档后,DBUtil的文档里会出现该注解说明。
5、@Repeatable 可以出现多次,见上面代码
多线程处理集合
6、很多强大的工具类
- Math:包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
- Arrays:包含用来操作数组(比如排序和搜索)的各种方法。不支持二维数组。
- Collections:包含用来操作集合(比如排序和搜索)的各种方法。
- Paths:通过get()方法返回一个Path对象,Path用于表示文件路径和文件。
- Files:提供了大量处理文件的方法,例如文件复制、读取、写入,获取文件属性、快捷遍历文件目录等....
- 红色是java8新增
Paths 工具类 能找文件,转化成流过滤文件
Files 工具类
Files 和paths 配合stream与IO流 能实现文件过滤、查找,与集合类转换,改变转换的集合类内容等等
Map的几个新方法,常用的,但感觉还是不够用
String类
分解
Stream 和正则结合
Steam的 chars()
但是原来的全都是 ASCII码,我用了 来转成 char
剩下 concurrent (正在发生的 adj ,n共点,同时发生的事件)和nashorn 没看
- Java新特征学习
- JAVA新特征
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- Java线程:新特征-锁
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- Java线程:新特征-原子量
- Java线程:新特征-信号量
- Java线程:新特征-原子量
- java线程:新特征-原子量
- java 1.5新特征concurrent
- android 画面风格切换(夜间模式/日间模式) (有小坑没解决)
- Codevs 2594 解药还是毒药
- Win10文件夹文件数量统计大法
- 我的第一篇博客!
- 开源框架XWIKI搭建介绍
- Java新特征学习
- python目录操作
- As转化对象失败时将返回null,而不是引发异常
- Python进阶之路—三
- 太阳神
- 通过20%的工作获得80%的性能改善jmeter实战
- 基础-Norm
- 【过滤器】(5)过滤器的应用案例:全站压缩技术(包装模式)
- 利用JsonConvert.SerializeObject()实现类对象的json化