What‘s New in JDK 8(Java8 新特性)

Java8 有哪些新的特性?

1 Java編程語言
Lambda 表達式 此版本中引入了Lambda Expressions(一種新的語言功能)。

 /*
                     * Create a comparator that compares lines by comparing
                     * values in the specified column.
                     */
                    Comparator<String> cmp
                            = Comparator.comparing(str -> getCell(str, column),
                                    String.CASE_INSENSITIVE_ORDER);

方法引用

  /*
                     * sorted(...) is used to sort records.
                     * forEach(...) is used to output sorted records.
                     */
                    br.lines().sorted(isAsc ? cmp : cmp.reversed())
                            .forEach(System.out::println);

接口添加默认方法

  /**
     * The Animal interface provides the default implementation
     * of the {@link #eat} method.
     */
    public interface Animal {

        /**
         * Return string representation of the eat action for Animal
         *
         * @return string representation of the eat action for Animal
         */
        default String eat() {
            return this.getClass().getSimpleName()
                    + " eats like an ordinary animal";
        }
    }

重复注解

@Repeatable(Authorities.class)
public @interface Authority {
     String role();
}
 

public @interface Authorities {
    Authority[] value();
}

public class RepeatAnnotationUseNewVersion {
    @Authority(role="Admin")
    @Authority(role="Manager")
    public void doSomeThing(){ }
}

类型注解

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Test {
}

改進的類型推斷。

    // 当两个参数类型相同时,则可以正确推断出返回值类型
    String s2 = pick("a", "b");
    System.out.println(s2.getClass());
     static <T> ArrayList<T> newArrayList() {
    return new ArrayList<T>();
}

方法参数反射

import java.lang.reflect.*;
import java.util.*;
 
class Test
{
   public void replace(String str, List<String> list){}
}
public class MethodParameterTest
{
   public static void main(String[] args)throws Exception
   {
      // 获取String的类
      Class<Test> clazz = Test.class;
      // 获取String类的带两个参数的replace()方法
      Method replace = clazz.getMethod("replace"
            , String.class, List.class);
      // 获取指定方法的参数个数
      System.out.println("replace方法参数个数:" + replace.getParameterCount());
      // 获取replace的所有参数信息
      Parameter[] parameters = replace.getParameters();
      int index = 1;
      // 遍历所有参数
      for (Parameter p : parameters)
      {
         if (p.isNamePresent())
         {
            System.out.println("---第" + index++ + "个参数信息---");
            System.out.println("参数名:" + p.getName());
            System.out.println("形参类型:" + p.getType());
            System.out.println("泛型类型:" + p.getParameterizedType());
         }
      }
   }

2 集合
添加 Stream API

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

HashMap 性能改善
在Java8之前HashMap是数组+链表的实现,数组是散列表,链表是为了解决哈希冲突而引入的拉链法解决方案。Java8对HashMap做了部分重构和性能优化,现在是用数组+链表+红黑树的实现,红黑树是为了在一个数组位置上哈希冲突大于8时,用红黑树的数据结构,将插入和查找的时间复杂度从O(n)降为O(logn)

3 安全
默認情況下啟用客戶端TLS 1.2
AccessController.doPrivileged 有了新的变化
更强大的密码加密算法
在 JSSE Server中提供SNI扩展支付
支持AEAD算法:
KeyStore的增強功能,包括新的Domain KeyStore類型
SHA-224消息摘要算法
NSA Suite B密码系统加强支持
随机数生成算法优化
新类java.security.cert.PKIXRevocationChecker
Windows的64位PKCS11
Kerberos 5 新rcache类型
Kerberos 5 协议转换支持
Kerberos 5 弱加密类型默认无效
GSS-API/Kerberos 5 机制解绑SASL
SASL service 多个主机名
在Mac OS X上JNI 桥接到本地JGSS
SunJSSE 提供更高强度的DH keys
JSSE支持服务端密码套件定制

4 JavaFX
新主题已在此版本实现
新的SwingNode类
新的UI Controls,包含DatePicker、 TreeTableView
javafx.print包为 JavaFX Printing API 提供了公共class。
3D图特性包含3D shapes, camera, lights, subscene, material, picking, 和antialiasing.。
WebView类提供了一些新特性和改进。
增強的文本支持
增加了对Hi-DPI显示的支持。
CSS Styleable classes 变成公共API。
新的ScheduledService 类,允许自动重启服务。
JavaFX現在可用於ARM平台

5 工具类
提供jjs命令,调用Nashorn 引擎;
java命令启动javaFx应用;

java主要界面重新设计;
提供jdeps命令行,分析Class文件;

JMX提供远程访问诊断命令;
jarsigner工具有个选项,从TSA请求签名时间戳;

在javac工具中,javac命令, -parameters参数用于存储参数名,使Reflection API检索参数名;
Java语言规范(JLS)第15.21节中的等式运算符的类型规则现在由javac命令正确执行。
該javac工具現在支持檢查javadoc註釋內容中是否存在在javadoc運行時生成的文件中可能導致各種問題(例如無效的HTML或可訪問性問題)的問題。該功能由新-Xdoclint選項啟用。有關更多詳細信息,請參見運行“ javac -X” 的輸出。該功能在該javadoc工具中也可用,並且默認情況下已啟用。
該javac工具現在提供了根據需要生成本機頭的功能。這樣就無需javah在構建管道中單獨運行該工具。javac通過使用新-h選項啟用了此功能,該選項用於指定應在其中寫入頭文件的目錄。頭文件將為任何具有本機方法或以type的新註釋註釋的常量字段的類生成java.lang.annotation.Native。

在Javadoc工具中,該javadoc工具支持新的DocTreeAPI,使您能夠將Javadoc註釋作為抽象語法樹進行遍歷。
該javadoc工具支持新的Javadoc Access API,使您可以直接從Java應用程序調用Javadoc工具,而無需執行新過程。有關更多信息,請參見javadoc新功能頁面。
該javadoc工具現在支持javadoc在javadoc運行時生成的文件中檢查註釋內容中是否存在可能導致各種問題的問題,例如無效的HTML或可訪問性問題。該功能默認情況下處於啟用狀態,也可以通過新-Xdoclint選項進行控制。有關更多詳細信息,請參見運行“ javadoc -X” 的輸出。該javac工具中也提供了此功能,儘管默認情況下未啟用該功能。

6 國際化
Unicode增強功能,包括對Unicode 6.2.0的支持
采用Unicode CLDR數據和java.locale.providers系統屬性

新的Calendar ,和Locale APIS;
能够安装一个自定义的Resource Bundle作为扩展;

7 部署
沙盒applets,Java Web Start 应用程序,URLPermission允许所有启动过的连接返回到服务中,SocketPermission不再授权。

8 脚本
Rhino javascript引擎被 Nashorn Javascript引擎替换。

Pack200
Pack200 对常量池和SR 292引入的新字节码提供支持。
JDK8支持JSR-292、JSR-308和JSR-335指定的类文件更改

IO 和 NIO
新类SelectorProvider,要使用,請將系統屬性java.nio.channels.spi.Selector設置為value sun.nio.ch.EventPortSelectorProvider
減小/jre/lib/charsets.jar文件 大小
java.lang.String(byte[], *)構造函數和java.lang.String.getBytes()方法的 性能改進。

java.lang和java.util包
并行数组排序。
标准的Base64编码、解码
无符号算法支持。

JDBC
JDBC-ODBC 桥被移除。
JDBC4.2引入了新特性。

Java 数据库
JDK 8包含Java DB 10.10。

网络
添加新类java.net.URLPermission。
在java.net.HttpURLConnection中,如果安装了安全管理器,則要求打開連接調用權限

并发
类和结构已经添加到java.util.concurrent包中。
方法已经添加到java.util.concurrent.ConcurrentHashMap类中,以支持基于新添加的流功能和lambda表達式的聚合操作。
已將類添加到java.util.concurrent.atomic包中,以支持可伸縮的可更新變量
已將方法添加到java.util.concurrent.ForkJoinPool類中以支持公共池。
該java.util.concurrent.locks.StampedLock班已添加到提供基於能力的鎖有三種模式控制讀/寫訪問
添加新类java.util.concurrent.locks.StampedLock,该类提供基于性能的锁,有三种模式控制读写访问。
Java XML - JAXP

HotSpot
Hardware intrinsics 被添加到AES中,注意,只有 Server VM支持AES intrinsics。
例如,要啟用硬件AES,請使用以下標誌: -XX:+UseAES -XX:+UseAESIntrinsics
禁用硬件AES,請使用以下標誌: -XX:-UseAES -XX:-UseAESIntrinsics
移除永久代。
用于方法调用的字节代码指令开始支持默认方法。

Java Mission Control 5.3發行說明
JDK 8包含Java Mission Control 5.3。

你可能感兴趣的:(java)