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. Asp.Net Core微服务初体验

    ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...

  2. Redux进阶(Redux背后的Flux)

    简介 Flux是一种搭建WEB客户端的应用架构,更像是一种模式而不是一个框架. 特点 单向数据流 与MVC的比较 1.传统的MVC如下所示(是一个双向数据流模型) 用户触发事件 View通知Contr ...

  3. ___Html页面使用Ajax做数据显示

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...

  4. Spring MVC的文件上传和下载

    简介: Spring MVC为文件上传提供了直接的支持,这种支持使用即插即用的MultipartResolver实现的.Spring MVC 使用Apache Commons FileUpload技术 ...

  5. 使用go, gin, gorm编写一个简单的curd的api接口

    go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口 hello world 常规版 新建 d ...

  6. MySQL分组查询与连接查询

    一,分组查询 使用ORDER BY子句将表中的数据分成若干组(还是按行显示) 语法: SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORD ...

  7. vue中使用百度地图,悬浮窗搜索功能

    https://www.cnblogs.com/shuaifing/p/8185311.html 侵删 <template> <div id="all"> ...

  8. Android开发支付集成——微信集成

    支付宝支付传送门:https://www.cnblogs.com/dingxiansen/p/9208949.html 二.微信支付 1. 微信支付流程图 相比较而言,微信支付是要比支付宝麻烦一些,并 ...

  9. 深入理解group by 语句的执行顺序 from→where→group by→select(含聚合函数)

    由于之前没有对group by 语句的执行顺序(执行原理)做深入的了解,所以导致在实际应用过程中出现了一些问题.举个简单的粟子,比如一个表testA中的所有数据如下图: 我现在想从testA中查询us ...

  10. 【English】十二、英语句子种类,陈述句、疑问句、祈使句、感叹句

    一.英语句子按照用途可以分为4类 种类.用途.例句 陈述句 用于说明事实或说话人的看法(事实不就是别人发起并被同意的看法) My name is Jennt Green. I like him bec ...