天天看点

jdk8新特性(jdk8新特性面试)

jdk8.101和jdk8.102的区别

在JDK1.7的新特性方面主要有下面几方面的增强:

1.jdk7语法上

1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头。

1.2 Switch语句支持string类型

1.3 Try-with-resource语句

注意:实现java.lang.AutoCloseable接口的资源都可以放到try中,跟final里面的关闭资源类似; 按照声明逆序关闭资源 ;Try块抛出的异常通过Throwable.getSuppressed获取

1.4 Catch多个异常 说明:Catch异常类型为final; 生成Bytecode 会比多个catch小; Rethrow时保持异常类型

1.5 数字类型的下划线表示 更友好的表示方式,不过要注意下划线添加的一些标准

1.6 泛型实例的创建可以通过类型推断来简化 可以去掉后面new部分的泛型类型,只用<>就可以了

1.7在可变参数方法中传递非具体化参数,改进编译警告和错误

1.8 信息更丰富的回溯追踪 就是上面try中try语句和里面的语句同时抛出异常时,异常栈的信息

2. NIO2的一些新特性

1.java.nio.file 和java.nio.file.attribute包 支持更详细属性,比如权限,所有者

2. symbolic and hard links支持

3. Path访问文件系统,Files支持各种文件操作

4.高效的访问metadata信息

5.递归查找文件树,文件扩展搜索

6.文件系统修改通知机制

7.File类操作API兼容

8.文件随机访问增强 mapping a region,locl a region,绝对位置读取

9. AIO Reactor(基于事件)和Proactor

2.1IO and New IO 监听文件系统变化通知

通过FileSystems.getDefault().newWatchService()获取watchService,然后将需要监听的path目录注册到这个watchservice中,对于这个目录的文件修改,新增,删除等实践可以配置,然后就自动能监听到响应的事件。

2.2 IO and New IO遍历文件树 ,通过继承SimpleFileVisitor类,实现事件遍历目录树的操作,然后通过Files.walkFileTree(listDir, opts, Integer.MAX_VALUE, walk);这个API来遍历目录树

2.3 AIO异步IO 文件和网络 异步IO在java

NIO2实现了,都是用AsynchronousFileChannel,AsynchronousSocketChanne等实现,关于同步阻塞IO,同步非阻塞IO,异步阻塞IO和异步非阻塞IO。Java NIO2中就实现了操作系统的异步非阻塞IO。

3. JDBC 4.1

3.1.可以使用try-with-resources自动关闭Connection, ResultSet, 和 Statement资源对象

3.2. RowSet 1.1:引入RowSetFactory接口和RowSetProvider类,可以创建JDBC driver支持的各种 row sets,这里的rowset实现其实就是将sql语句上的一些操作转为方法的操作,封装了一些功能。

3.3. JDBC-ODBC驱动会在jdk8中删除

4. 并发工具增强

4.1.fork-join

最大的增强,充分利用多核特性,将大问题分解成各个子问题,由多个cpu可以同时解决多个子问题,最后合并结果,继承RecursiveTask,实现compute方法,然后调用fork计算,最后用join合并结果。

4.2.ThreadLocalRandon 并发下随机数生成类,保证并发下的随机数生成的线程安全,实际上就是使用threadlocal

4.3. phaser 类似cyclebarrier和countdownlatch,不过可以动态添加资源减少资源

5. Networking增强

新增URLClassLoader close方法,可以及时关闭资源,后续重新加载class文件时不会导致资源被占用或者无法释放问题

URLClassLoader.newInstance(new URL[]{}).close();

新增Sockets Direct Protocol

绕过操作系统的数据拷贝,将数据从一台机器的内存数据通过网络直接传输到另外一台机器的内存中

6. Multithreaded Custom Class Loaders

解决并发下加载class可能导致的死锁问题,这个是jdk1.6的一些新版本就解决了,jdk7也做了一些优化。有兴趣可以仔细从官方文档详细了解

JDK1.8的新特性

一、接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。

二、Lambda 表达式

在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:

Collections.sort(names, (String a, String b) -> {

return b.compareTo(a);

三、函数式接口

Lambda表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。

四、方法与构造函数引用

Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:

java se8的新特性有哪些

java se8新特性如下:

Java Programming Language

1、lambda expressions,一个新的语言特性,它可以将功能作为方法的参数or代码作为数据,它使你表达单一方法接口的实例更加简洁。

2、对已经有方法名的方法提供一个更加可读的lambda expressions为方法的引用。

3、默认方法使新的功能添加到库的接口,确保与旧版本的接口编写的代码的二进制兼容

4、重复注解提供不止一次应用同样的注解类型

5、类型注解提供应用注解的能力,任何一个类型的使用,不仅在声明上使用。用于一个可插拔式的系统,此功能提高你代码的类型检查。

6、提高类型的推断

7、方法参数的反射

Collections

1、新的java.util.stream包,提供了stream api支持流元素上的功能性操作。stream api集成到collections api中,使用批量操作,如串行or并行 map-reduce 转换。

2、使用key collisions改进HashMap的性能

compact profiles

包含java SE平台预定义的子集和使不需要整个平台被部署和运行在小型设备中的应用

security

1、客户端默认启用TLS1.2

2、新的AccessController.doPrivileged,用代码断言它的privileges的子集,没有防止全栈遍历时检查其他权限

3、更强的基于密码的加密算法

4、SSL/TLS SNI扩展在JSSE服务器中支持

5、支持AEAD算法:SunJCE提供增强的支持AES / GCM / nopadding密码的实现以及GCM算法参数,SunJSSE提供基于密码套件的AEAD模式增强

6、keystore增强,包含新的keystore类型java.security.DomainLoadStoreParameter,和新的命令行选项-importpassword

7、SHA-224 Message Digests

8、NSA Suite B加密支持

9、更好的支持High Entropy 随机数生成

10、新的java.security.cert.PKIXRevocationChecker类为配置撤销X.509证书

11、win下64-bit PKCS11

12、新的rcache 类型在Kerberos 5 Replay Caching

13、支持Kerberos 5协议转换和约束代理

14、默认禁用Kerberos 5弱的加密

15、未绑定SASL为GSS-API/Kerberos 5机制

16、多主机名下SASL服务

17、在Mac OS X上JNI桥接到native JGSS

18、在sunjsse提供更强的实力,EDH键的支持

19、在JSSE支持服务器端密码套件个性设置

JavaFX

1、新Modena theme实现

2、新SwingNode类容许开发者嵌套Swing内容到javaFX应用中

3、新UI Controls 包含DatePicker 和TreeTableView

4、javafx.print包为JavaFX提供公共printing API

5、三维图形特性,目前包含3D shapes、camera、lights、subscene、material、picking和antialiasing

6、WebView类提供的新功能和改进,支持更多关于HTML5的特性,Web Scokets,Web Workers和Web Fonts

7、增强文本的支持

8、支持Hi-DPI 显示

9、css样式类变成公共API

10、新的ScheduledService类允许自动重启服务

11、ARM平台可用JavaFX

tools

1、jjs命令调用Nashorn引擎

2、java命令允许JavaFX应用

3、java man page已经更新

4、jdeps命令行工具提供分析类文件

5、Java Management Extensions (JMX) 提供远程诊断命令

6、jarsiger工具可选,从TSA请求签名时间抽

7、javac tool

7.1、-parameters选项存储正式的参数名和反射API检索正式参数的名称

7.2、JLS 15.21相等操作的类型规则通过javac命令正确的执行

7.3、javac工具现在支持检查javadoc注释的内容,该特性通过-Xdoclint选项

7.4、javac工具现在提供生成native header的能力。移除javah工具,通过javac的-h选项使用

8、javadoc tool

8.1、javadoc工具支持新DocTree API

8.2、javadoc工具支持新的javadoc 访问API,允许在java 应用直接调用javadoc 工具,没有执行新的进程

8.3、javadoc工具现在支持检查javadoc注释的内容,该特性通过-Xdoclint选项

Internationalization

1、unicode增强,支持unicode6.2.0

2、采用unicode CLDR数据和java.locale.providers 系统属性

3、新的Calendar和Locale APIs

4、安装一个自定义的资源包作为一个扩展的能力

Deployment

1、对sandbox applet和 java web start app,URLPermission现在是用来允许连接到服务器从它们启动完成后。SocketPermission不再授权

2、在所有安全级别,在主要jar文件的jar文件的manifest中必须给定权限属性

Date-Time Package

一个新的软件包,提供更加全面的日期-时间模型

Scripting

Nashorn js 引擎

Pack200

1、Pack200支持常量池条目和由JSR 292引入了新的字节码

2、JDK8支持由JSR-292, JSR-308 and JSR-335指定类文件的变化

IO and NIO

1、基于Solaris在Solaris事件端口机制实现新的SelectorProvider。使用系统属性java.nio.channels.spi.Selector设置的值sun.nio.ch.EventPortSelectorProvder运行

2、减少/jre/lib/charsets.jar文件中数量

3、提高java.lang.String(byte[], *)构造器和java.lang.String.getBytes()方法的性能

java.lang and java.util.Packages

1、并发的数组排序

2、标准的编码和解码Base64

3、无符号运算的支持

1、移除JDBC-ODBC桥

2、JDBC4.2引入新的功能

Java DB

1、JDK8 包含 Java DB 10.10

Networking

1、添加java.net.URLPermission类

2、在java.net.HttpURLConnection中,如果安装安全管理,请求要求打开一个连接请求的权限

Concurrency

1、在java.util.concurrent包中新增类和接口

2、java.util.concurrent.ConcurrentHashMap类添加方法支持聚合操作,基于新的流设施和lambda expressions

3、java.util.concurrent.atomic包中添加类支持可扩展可更新的变量

4、 java.util.concurrent.ForkJoinPool类中添加方法支持通用池

5、 java.util.concurrent.locks.StampedLock类已经添加使用3种模式控制读/写访问的基于能力的锁

Java XML – JAXP

HotSpot

1、硬件特性增加了AES,UseAES和UseAESIntrinsics标签在打开基于硬件AES可用(Inter 硬件),硬件必须是2010或更新Westmere硬件,如:打开硬件AES,使用下面标记

-XX:+UseAES -XX:+UseAESIntrinsics

关闭硬件AES:

-XX:-UseAES -XX:-UseAESIntrinsics