Jdk8新特性

一:接口默认方法和静态方法:

我们可以在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。 我们还可以在接口中定义静态方法,使用static关键字,也可以提供实现。例如:

  1. public interface DefaultFunctionInterface {
  2.  default void defaultFunction() {
  3.  System.out.println("接口DefaultFunctionInterface中的default defaultFunction方法被调用...");
  4.  }
  5.  static void staticFunction() {
  6.  System.out.println("接口DefaultFunctionInterface中的静态方法staticFunction方法被调用...");
  7.  }
  8.  }

子类实现和调用demo:

  1. public class DefaultFunctionInterfaceImpl implements DefaultFunctionInterface {
  2.  public static void main(String[] args){
  3.  DefaultFunctionInterfaceImpl dif = new DefaultFunctionInterfaceImpl();
  4. dif.defaultFunction(); //子类调用父类接口中default方法
  5.  DefaultFunctionInterface.staticFunction();//调用接口中的静态方法
  6.  }
  7. }

讨论java为什么要使用多继承? 接口允许default和static是否会有类似的情况?

二:Lambda表达式

首先来看看老版本的java是如排列字符串的(这里按照字符串的长度排序):

  1.  List<String> strs = Arrays.asList("A","AAAAAAAAAAA","AAA","AAAAAAAAA","AAAAA","AAAAAAAAAAAAA","AAAAAAA");
  2.  Collections.sort(strs, new Comparator<String>() {
  3.  @Override
  4.  public int compare(String o1, String o2) {
  5.  Integer l1 = o1.length();
  6.  Integer l2 = o2.length();
  7.  return l1.compareTo(l2);
  8.  }
  9.  });

只需要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常做法都是创建一个 匿名内部类 的比较器对象然后将其传递给sort方法。在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:

  1.  List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");
  2.  Collections.sort(strs,(String o1,String o2)->{
  3.  Integer l1 = o1.length();
  4.  Integer l2 = o2.length();
  5.  return l1.compareTo(l2);
  6.  });

可读性变强了,但是实际上还可以写得更短(省略参数类型):

  1.  List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");
  2.  Collections.sort(strs,( o1, o2)->{
  3.  Integer l1 = o1.length();
  4.  Integer l2 = o2.length();
  5.  return l1.compareTo(l2);
  6.  });

运行结果都为: 

对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字,将代码写的更短,例如(这里就不按照字符串长度排序了):

  1.  List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");
  2.  Collections.sort(strs,(o1,o2)->o1.compareTo(o2));

__总结: 
1.如果形参列表是空的,只需要保留()即可; 
2.如果没有返回值,只需要在{}写执行语句即可; 
3.如果接口的抽象方法只有一个形参,()可以省略,只需要写一个参数名称即可; 
4.如果执行语句只有一行,可以省略{},但是如果有返回值的时候不能省略。

原理: Java编译器可以根据要传递的对象或者左边对象类型自动推导出参数类型,所以你可以不用再写一次类型,适用于只有单接口方法的接口(比如这里的排序,线程等...)__

三:函数式接口

  1.  是指仅仅只包含一个抽象方法的接口,可以添加 @FunctionalInterface 注解约束,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的,当然里面可以包含default方法和static方法。

例如:

  1. @FunctionalInterface
  2. public interface DefaultFunctionInterface {
  3.  void sayHello(String name);
  4.  public static void main(String[] args){
  5.  DefaultFunctionInterface df = name->System.out.println("hello===>"+name);
  6. df.sayHello("Bruce");
  7.  }
  8.  }

Jdk9新特性

jdk9 ea版本(early access 抢先版),下载地址:http://jdk.java.net/9/

一:JShell

JShell : 其实就是一个命令行工具,安装完JDK9后,可以在bin目录下找到该工具,与Python的解释器极其相似,用过Python解释器的人应该会非常熟悉。它可以让你体验交互式编程,有一些比较有趣的特性: 
实战:  
在jdk9安装目录的bin下面打开命令行工具,直接输入jshell进入jshell。 
直接输入代码:System.out.println("Hello World"); 回车执行.输出"Hello World". 
创建方法:void hello(){System.out.println("Hello 货车帮!");} 
计算:输入1+1回车执行输出计算结果. 存储了一个临时变量,可以声明一个变量,利用这个临时变量给声明的变量赋值.

  1.  JShell除了可以作为单独的JDK工具,还可以创建类,为这个类写方法,还可以提供一个API,它能对外部调用开放所有的功能。这意味着外部工具可以连接并使用JShell的功能,如此一些很有趣的可能性突然就被开发了出来,比如在Eclipse、IntelliJ或Netbeans之类的IDE中引用它。对于该API可能还有更多创造性的用例,例如利用该API来扩展静态分析的工具,自动化测试或者甚至是连接到实时的JVM。

二:集合工厂方法(试了9ea版本好像还不行):

通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法,除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现:

  1. Set<Integer> ints = Set.of(1, 2, 3);
  2. List<String> strings = List.of("first", "second");

三:其他的一些新特性: 自带JSON API,升级HttpURLConnection(相当于自带httpclient) 和 modules(平台级模块系统)

.......

JDK 新特性的更多相关文章

  1. JDK新特性关于流操作部分

    // array 工具类 可以用来快捷的将数组转化为list List<String> strings = Arrays.asList("zhongguo", &quo ...

  2. JavaEE基础(二十七)/反射、JDK新特性

    1.反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载  就是指将class文件读入 ...

  3. day27(027-反射&JDK新特性)

    ###27.01_反射(类的加载概述和加载时机) A:类的加载概述 *加载   就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. *连接  ...

  4. 史上最全jdk新特性总结,涵盖jdk8到jdk15!

    前言 在本文中,我将描述自第8版以来Java最重要且对开发人员友好的功能.为什么会有这样的主意?在Web上,您可以找到许多文章,其中包含每种Java版本的新功能列表.但是,由于缺少文章,因此无法简要概 ...

  5. JAVA笔记 之 JDK新特性

    JDK1.5新特性1.泛型(Generics) 为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast) 2.增强的for循环(for ...

  6. 第十四章 JDK新特性回顾

    14.1.JDK5新特性回顾 自动装箱.拆箱 静态导入 增强for循环 可变参数 枚举 泛型 元数据 14.2.JDK7新特性回顾 对Java集合(Collections)的增强支持 在switch中 ...

  7. JDK新特性——Stream代码简洁之道的详细用法

    一.概述 Stream 是一组用来处理数组.集合的API,Stream API 提供了一种高效且易于使用的处理数据的方式. Java 8 中之所以费这么大的功夫引入 函数式编程 ,原因有两个: 代码简 ...

  8. JDK新特性-Lambda表达式的神操作

    一.Lambda表达式的介绍 Lambda表达式是 Java8 中最重要的新功能之一.使用 Lambda 表达 式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂.Lambd ...

  9. Java(45)JDK新特性之String流

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201671.html 博客主页:https://www.cnblogs.com/testero ...

随机推荐

  1. .NetCore WebAPI采坑之路(持续更新)

    1.WebAPI新增日志过滤器or中间件后Action读取到的请求Body为空问题 案例: 自定义了一个中间件,用于记录每次访问webapi的入参,以及引用了Swagger. 先看下面这段代码: pu ...

  2. LeetCode矩阵题型

    以三角形遍历矩阵 ; i < matrix.size(); ++i) { ; j < matrix[i].size(); ++j) swap(matrix[i][j], matrix[j] ...

  3. 配置Nginx部署静态资源和自动跳转到https

    一.首先在阿里云后台添加域名解析: 二.两个网站的静态资源在以下目录: /www/temp/blog/public 三.在服务器端配置nginx: cd /etc/nginx/conf.d 添加两个文 ...

  4. pdf.js 使用实例

    pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责 ...

  5. 玩玩小程序:使用 WebApi 交互打造原生的微信小程序 - 图灵小书架

    使用 WebApi 交互打造原生的微信小程序 - 图灵小书架 目录 介绍 源码地址 扫一扫体验 代码分析 其它相关信息(互联网搜集) 介绍 定时抓取图灵社区官网的首页.最热.推荐和最新等栏目的相关图书 ...

  6. c# Lambda操作类封装

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  7. Nginx实现负载均衡功能

    一.什么是Nginx? Nginx是一款轻量级的Web 服务器.反向代理服务器.电子邮件(IMAP/POP3)代理服务器. 二.Nginx的优点: 高并发连接:官方测试Nginx能够支撑5万并发连接, ...

  8. h5与c3权威指南笔记--css3结构性伪类选择器root,not,empty,target

    root:将样式绑定到根元素(html中的根元素是<html></html>) 举个栗子 :root{ background-color: yellow; } body{ ba ...

  9. Docker的使用

    Ubuntu16.04+ 在Ubuntu系统中安装较为简单,官方提供了脚本供我们进行安装. sudo apt install curl curl -fsSL get.docker.com -o get ...

  10. matlab中的实时音频

    音频系统工具箱™针对实时音频处理进行了优化.audioDeviceReader, audioDeviceWriter, audioPlayerRecorder, dsp.AudioFileReader ...