JDK 新特性
Jdk8新特性
一:接口默认方法和静态方法:
我们可以在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。 我们还可以在接口中定义静态方法,使用static关键字,也可以提供实现。例如:
public interface DefaultFunctionInterface {default void defaultFunction() {System.out.println("接口DefaultFunctionInterface中的default defaultFunction方法被调用...");}static void staticFunction() {System.out.println("接口DefaultFunctionInterface中的静态方法staticFunction方法被调用...");}}
子类实现和调用demo:
public class DefaultFunctionInterfaceImpl implements DefaultFunctionInterface {public static void main(String[] args){DefaultFunctionInterfaceImpl dif = new DefaultFunctionInterfaceImpl();dif.defaultFunction(); //子类调用父类接口中default方法DefaultFunctionInterface.staticFunction();//调用接口中的静态方法}}
讨论java为什么要使用多继承? 接口允许default和static是否会有类似的情况?
二:Lambda表达式
首先来看看老版本的java是如排列字符串的(这里按照字符串的长度排序):
List<String> strs = Arrays.asList("A","AAAAAAAAAAA","AAA","AAAAAAAAA","AAAAA","AAAAAAAAAAAAA","AAAAAAA");Collections.sort(strs, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {Integer l1 = o1.length();Integer l2 = o2.length();return l1.compareTo(l2);}});
只需要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常做法都是创建一个 匿名内部类 的比较器对象然后将其传递给sort方法。在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:
List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");Collections.sort(strs,(String o1,String o2)->{Integer l1 = o1.length();Integer l2 = o2.length();return l1.compareTo(l2);});
可读性变强了,但是实际上还可以写得更短(省略参数类型):
List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");Collections.sort(strs,( o1, o2)->{Integer l1 = o1.length();Integer l2 = o2.length();return l1.compareTo(l2);});
运行结果都为: 
对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字,将代码写的更短,例如(这里就不按照字符串长度排序了):
List<String> strs = Arrays.asList("a","avgdeqegtrq","gcs","qwrgreqwh","hgtyu","qwerrtyuhjgfd","ghjkuyt");Collections.sort(strs,(o1,o2)->o1.compareTo(o2));
__总结:
1.如果形参列表是空的,只需要保留()即可;
2.如果没有返回值,只需要在{}写执行语句即可;
3.如果接口的抽象方法只有一个形参,()可以省略,只需要写一个参数名称即可;
4.如果执行语句只有一行,可以省略{},但是如果有返回值的时候不能省略。
原理: Java编译器可以根据要传递的对象或者左边对象类型自动推导出参数类型,所以你可以不用再写一次类型,适用于只有单接口方法的接口(比如这里的排序,线程等...)__
三:函数式接口
是指仅仅只包含一个抽象方法的接口,可以添加 @FunctionalInterface 注解约束,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的,当然里面可以包含default方法和static方法。
例如:
@FunctionalInterfacepublic interface DefaultFunctionInterface {void sayHello(String name);public static void main(String[] args){DefaultFunctionInterface df = name->System.out.println("hello===>"+name);df.sayHello("Bruce");}}
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回车执行输出计算结果. 存储了一个临时变量,可以声明一个变量,利用这个临时变量给声明的变量赋值.
JShell除了可以作为单独的JDK工具,还可以创建类,为这个类写方法,还可以提供一个API,它能对外部调用开放所有的功能。这意味着外部工具可以连接并使用JShell的功能,如此一些很有趣的可能性突然就被开发了出来,比如在Eclipse、IntelliJ或Netbeans之类的IDE中引用它。对于该API可能还有更多创造性的用例,例如利用该API来扩展静态分析的工具,自动化测试或者甚至是连接到实时的JVM。
二:集合工厂方法(试了9ea版本好像还不行):
通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法,除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现:
Set<Integer> ints = Set.of(1, 2, 3);List<String> strings = List.of("first", "second");
三:其他的一些新特性: 自带JSON API,升级HttpURLConnection(相当于自带httpclient) 和 modules(平台级模块系统)
.......
JDK 新特性的更多相关文章
- JDK新特性关于流操作部分
// array 工具类 可以用来快捷的将数组转化为list List<String> strings = Arrays.asList("zhongguo", &quo ...
- JavaEE基础(二十七)/反射、JDK新特性
1.反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入 ...
- day27(027-反射&JDK新特性)
###27.01_反射(类的加载概述和加载时机) A:类的加载概述 *加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. *连接 ...
- 史上最全jdk新特性总结,涵盖jdk8到jdk15!
前言 在本文中,我将描述自第8版以来Java最重要且对开发人员友好的功能.为什么会有这样的主意?在Web上,您可以找到许多文章,其中包含每种Java版本的新功能列表.但是,由于缺少文章,因此无法简要概 ...
- JAVA笔记 之 JDK新特性
JDK1.5新特性1.泛型(Generics) 为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast) 2.增强的for循环(for ...
- 第十四章 JDK新特性回顾
14.1.JDK5新特性回顾 自动装箱.拆箱 静态导入 增强for循环 可变参数 枚举 泛型 元数据 14.2.JDK7新特性回顾 对Java集合(Collections)的增强支持 在switch中 ...
- JDK新特性——Stream代码简洁之道的详细用法
一.概述 Stream 是一组用来处理数组.集合的API,Stream API 提供了一种高效且易于使用的处理数据的方式. Java 8 中之所以费这么大的功夫引入 函数式编程 ,原因有两个: 代码简 ...
- JDK新特性-Lambda表达式的神操作
一.Lambda表达式的介绍 Lambda表达式是 Java8 中最重要的新功能之一.使用 Lambda 表达 式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂.Lambd ...
- Java(45)JDK新特性之String流
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201671.html 博客主页:https://www.cnblogs.com/testero ...
随机推荐
- 通用查询设计思想(2)- 基于ADO.Net的设计
不少公司用的是ADO.NET的访问方式,估计不少朋友对于sql的拼写真是深恶痛绝,在没有一个封装足够好的底层的项目,特别是经过许多人接手之后,代码那叫一个惨不忍睹,本文借助[通用查询设计思想]这篇文章 ...
- cocos creator主程入门教程(七)—— MVC架构
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...
- centos7+rsyslog+loganalyzer+mysql 搭建rsyslog日志服务器
一.简介 在centos7系统中,默认的日志系统是rsyslog,它是一类unix系统上使用的开源工具,用于在ip网络中转发日志信息,rsyslog采用模块化设计,是syslog的替代品. 1.rsy ...
- ACCP8.0 HTML标签
ACCP8.0 HTML标签 第一章1.HTML超文本标记语言2.网页<html></html>3.网页头部<head></head>4.网页标题< ...
- vs2015安装编辑神器:resharper10.0
在平时的开发工作中,作为一名程序员,难免会想办法找到适合自己的开发编辑器.这款插件来自JetBrains公司.接下来就来教大家如何对这款软件进行安装与破解. 1:首先下载与安装.如果没有找到适合的资源 ...
- HBase在共享经济互联网业务的应用
HDFS 与 Hbase HDFS容错率很高,即便是在系统崩溃的情况下,也能够在节点之间快速传输数据.HBase是非关系数据库,是开源的Not-Only-SQL数据库,它的运行建立在Hadoop上.H ...
- .net MVC +EF+VUE做回合制游戏(二)
Emmm,游戏中的属性购买页面 话不多说先上代码 <form id="vue" action="/ltgdGame.Web/Main/Index" met ...
- .NET知识体系(转载)
这篇文章为新手指明的学习方向: https://www.cnblogs.com/mcgrady/p/4725038.html 先生存后发展,先学会选择和使用知识和工具来做东西,然后在研究怎么做的再好一 ...
- Java基础差,需要怎么补
本文首发于本博客 猫叔的博客,转载请申明出处 感谢sugar的提问:Java基础差,需要怎么补? 欢迎关注公众号:Java猫说 我整体的总结了一下,大致分为以下的几个点说一下: 1.善于使用搜索引擎 ...
- 深挖 NPM 机制
使用NPM安装的时候会经常出现包冲突(比如多个主模块的子模块版本不一致等),导致在开发过程中会遇到各种或大或小的问题.所有在这会介绍以下内容: NPM 主要安装方式 NPM 包信息查询 NPM 安装机 ...