java8新特性

java8新特性有:1、接口的默认方法;2、Lambda 表达式;3、函数式接口;4、方法引用和构造器引用;5、Stream API;6、Date/Time API(JSR 310);7、Optional类;8、Nashorn JavaScript引擎。接口的默认方法是指,在接口中新增了default方法和static方法。

1、接口的默认方法

在接口中新增了static方法和default方法,这两种方法可以有方法体。

static方法

示例代码:

public interface DefalutTest {
    static int a =5;
    default void defaultMethod(){
        System.out.println("DefalutTest defalut 方法");
    }

    int sub(int a,int b);

    static void staticMethod() {
        System.out.println("DefalutTest static 方法");
    }
}

接口里的静态方法,即static修饰的有方法体的方法不会被继承或者实现,但是静态变量会被继承。接口中的static方法不能被继承,也不能被实现类调用,只能被自身调用。

default方法

准备一个子接口继承DefalutTest接口:

public interface SubTest extends DefalutTest{

}

准备一个子接口的实现类:

public class SubTestImp implements SubTest{

    @Override
    public int sub(int a, int b) {
        // TODO Auto-generated method stub
        return a-b;
    }

}

创建一个子接口实现类对象,并调用对象中的default方法:

public class Main {

    public static void main(String[] args) {
        SubTestImp stl = new SubTestImp();
        stl.defaultMethod();

    }
}

执行结果:DefalutTest defalut 方法。

default方法的相关总结:

  • default方法可以被子接口继承亦可被其实现类所调用
  • default方法被继承时,可以被子接口覆写
  • 如果一个类实现了多个接口,且这些接口中无继承关系,这些接口中若有相同的(同名,同参数)的default方法,则接口实现类会报错,接口实现类必须通过特殊语法指定该实现类要实现那个接口的default方法

2、Lambda 表达式

Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。Lambda表达式可以看成是匿名内部类,使用Lambda表达式时,接口必须是函数式接口。

Lambda表达式在java语言中引入了一种新的语法元素和操作。这种操作符号为“->”,Lambda操作符或箭头操作符,它将Lambda表达式分割为两部分。 左边:指Lambda表达式的所有参数 右边:指Lambda体,即表示Lambda表达式需要执行的功能。

Lambda表达式的基本格式:

        <函数式接口>  <变量名> = (参数1,参数2...) -> {
                //方法体
    }

说明:

  • (参数1,参数2…)表示参数列表;->表示连接符;{}内部是方法体
  • =右边的类型会根据左边的函数式接口类型自动推断;
  • 如果形参列表为空,只需保留();
  • 如果形参只有1个,()可以省略,只需要参数的名称即可;
  • 如果执行语句只有1句,且无返回值,{}可以省略,若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有1句;
  • 形参列表的数据类型会自动推断;
  • lambda不会生成一个单独的内部类文件;
  • lambda表达式若访问了局部变量,则局部变量必须是final的,若是局部变量没有加final关键字,系统会自动添加,此后在修改该局部变量,会报错。

3、函数式接口

4、方法引用和构造器引用

方法引用

当要传递给Lambda体的操作已经有实现方法,可以直接使用方法引用(实现抽象方法的列表,必须要和方法引用的方法参数列表一致)。

格式:使用操作符“::”将方法名和(类或者对象)分割开来。

有下列三种情况:

  • 对象::实例方法
  • 类::实例方法
  • 类::静态方法

代码:

package com.chen.test.JAVA8Features;
​
public class MethodRefDemo {
    public static void main(String[] args) {
        FunctionGeneric<String> strName = s -> System.out.println(s);
        strName.fun("Lambda表达式没有使用方法引用");
        
        //方法引用
        FunctionGeneric<String> strName2 = System.out::println;
        strName2.fun("使用方法引用");
​
​
    }
}

构造器引用

本质上:构造器引用和方法引用相识,只是使用了一个new方法。

使用说明:函数式接口参数列表和构造器参数列表要一致,该接口返回值类型也是构造器返回值类型.

格式:ClassName :: new

代码:

package com.chen.test.JAVA8Features;
​
import java.util.function.Function;
​
public class MethodRefDemo {
    public static void main(String[] args) {
​
        //构造器引用
        Function<String, Integer> fun1 = (num) -> new Integer(num);
        Function<String, Integer> fun2 = Integer::new;
​
        //数组引用
        Function<Integer,Integer[]> fun3 = (num) ->new Integer[num];
        Function<Integer,Integer[]> fun4 = Integer[]::new;
    }
}

5、Stream API

StreamAPI它位于java.util.stream包中,StreamAPI帮助我们更好地对数据进行集合操作,它本质就是对数据的操作进行流水线式处理,也可以理解为一个更加高级的迭代器,主要作用是遍历其中每一个元素。简而言之,StreamAP提供了一种高效且易于使用的处理数据方式。

Stream特点:

  • Stream自己不会存储数据。
  • Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream对象
  • Stream操作时延迟执行的。这就意味着它们等到有结果时候才会执行。
  • 和list不同,Stream代表的是任意Java对象的序列,且stream输出的元素可能并没有预先存储在内存中,而是实时计算出来的。它可以“存储”有限个或无限个元素。

6、Date/Time API(JSR 310)

Java 8引入了新的Date-Time API(JSR 310)来改进时间、日期的处理。时间和日期的管理一直是最令Java开发者痛苦的问题。java.util.Date和后来的java.util.Calendar一直没有解决这个问题。

因为上面这些原因,诞生了第三方库Joda-Time,可以替代Java的时间管理API。Java 8中新的时间和日期管理API深受Joda-Time影响,并吸收了很多Joda-Time的精华。新的java.time包包含了所有关于日期、时间、时区、Instant(跟日期类似但是精确到纳秒)、duration(持续时间)和时钟操作的类。新设计的API认真考虑了这些类的不变性(从java.util.Calendar吸取的教训),如果某个实例需要修改,则返回一个新的对象。

7、Optional类

官方库加入了谷歌的Optional,用来存放T类型的值或者null。它提供了一些有用的接口来避免显式的null检查。如果Optional实例持有一个非空值,则isPresent()方法返回true,否则返回false;orElseGet()方法,Optional实例持有null,则可以接受一个lambda表达式生成的默认值;map()方法可以将现有的Opetional实例的值转换成新的值;orElse()方法与orElseGet()方法类似,但是在持有null的时候返回传入的默认值。

Optional< String > fullName = Optional.ofNullable( null );
System.out.println( "Full Name is set? " + fullName.isPresent() );        
System.out.println( "Full Name: " + fullName.orElseGet( () -> "[none]" ) ); 
System.out.println( fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );

8、Nashorn JavaScript引擎

Java 8提供了新的Nashorn JavaScript引擎,使得我们可以在JVM上开发和运行JS应用。Nashorn JavaScript引擎是javax.script.ScriptEngine的另一个实现版本,这类Script引擎遵循相同的规则,允许Java和JavaScript交互使用。

ScriptEngine engine = ScriptEngineManager::getEngineByName( "JavaScript" );
System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );
// 输出 -> Result: 2

延伸阅读

java8新特性特点

  1. 速度快;
  2. 代码少、简介(新增特性:lamdba表达式);
  3. 强大的Stream API;
  4. 使用并行流和串行流;
  5. 最大化较少空指针异常Optional。

开发者生产力工具大全

从人工到自动化,从重复到创新,技术演进的历程中,都伴随着开发者工具类产品的发展,所以这里整理近几年口碑良好,使用广泛的22款程序员生产力工具。

1.研发项目管理与协作:PingCode

优点:让工作推进、进度/问题追踪、团队协作变得更简单,2021年研发项目管理榜单TOP1(36Kr)。

简介:覆盖研发全生命周期,广泛用于需求、版本、项目(敏捷/kanban/瀑布)、测试、缺陷、文档、效能等环节管理与协作。并且集成github、gitlab、jinkens等主流工具,支持私有部署、在线等多种部署使用方式。

教程/官网

2.任务管理/甘特图制作工具:Worktile

优点:功能成熟、性价比高、国内市场占有率最高的团队任务工具;

简介:在功能上Worktile 是一个工具集合,它具备OKR目标管理、项目管理、项目集管理、项目计划、项目风险、项目成本管理、企业网盘、审批、简报等能力。并且具备强大的自定义能力,能够配置出符合各种项目团队的流程、表单、字段、数据报表,以及具备丰富的模板市场。

官网/教程

3.分布式版本控制系统:Git

优点:分布式开发、速度快、灵活

简介:Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

教程/官网

4.数据库管理工具:Navicat

优点:高效、安全,最好用的数据库管理工具。

简介:“Navicat”是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和 MongoDB 等不同类型的数据库,它与阿里云、腾讯云、华为云、Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud 和 MongoDB Atlas等云数据库兼容。

官网/教程

其余工具可通过《神级程序员都用什么工具?程序员生产力工具大全 》查看,以上均整理自该文章。

文章标题:java8新特性,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/47450

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月21日 下午8:07
下一篇 2023年3月21日 下午8:28

相关推荐

  • 项目管理怎么做

    项目管理的做法:1、项目概念与启动;2、项目定义和规划;3、项目执行和交付;4、监控和控制项目绩效;5、项目结束和评估。项目概念与启动可以从一张纸和一支笔开始,以帮助绘制您需要完成的项目想法。 1、项目概念与启动 项目管理过程的第一步是安顿下来,以您的项目理念为主导的项目概念和启动。这个“启动”阶段…

    2023年2月24日
    4000
  • linux查看日志的三种命令

    linux查看日志的三种命令有:1、grep命令;2、tail命令;3、more命令。grep命令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。 1、grep命令 grep全称是Global Regular Ex…

    2023年3月19日
    37600
  • 前端怎么获取数据库内容

    步骤是:一、建立数据库连接;二、编写后端API;三、发送请求;四、处理响应;五、优化性能。在前端获取数据库内容之前,必须先建立与数据库的连接。后端服务器通常会提供一个API来实现这个连接。 一、建立数据库连接 在前端获取数据库内容之前,必须先建立与数据库的连接。后端服务器通常会提供一个API来实现这…

    2023年5月31日
    1800
  • 模块化编程与面向对象程序设计的区别与联系是什么

    区别是:模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,通过模块的互相协作完成整个功能的程序设计方法。而面向对象程序设计作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。 模块化编程 模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干…

    2023年2月20日
    12900
  • 信息安全领域最薄弱的环节是什么

    信息安全领域最薄弱的环节是人。
    世界头号黑客Kevin Mitnick 曾说过一句话被广泛认可:“人是最薄弱的环节。”
    因此,“人”通常被认为是信息安全中的“薄弱的环节”,即人为威胁。人为威胁可以分为无意识和有意识两种。

    2022年10月12日
    28100
  • 看板管理的作用和目的是什么

    通过看板方法,你可以将不可见的知识型工作以及它的流动过程可视化,这有助于管理者可视化项目的风险。在精益生产中看板管理的目的和意义主要体现在:传递现场的生产信息,统一思想;及时发现管理中的漏洞;绩效考核的公平化、透明化;保证生产现场作业秩序提升公司形象。 一、看板的目的和意义是什么? 通过看板方法,你…

    2023年2月1日
    10500
  • 工时填报软件有什么

    工时填报软件有:1、Excel;2、PingCode;3、Worktile;4、诺明软件;5、aceteamwork;6、zoho project。在人数少的时候,Excel其实是很OK的,但其缺点也明显,比如手工收集汇总工时,可能存在数据覆盖、丢失、数据准确性差、太耗精力、无法做到数据实时共享,统…

    2023年4月21日
    2300
  • 业务管理包括哪些内容

    业务管理内容包括:1、业务战略 2、财务分析 3、生产制造 4、销售和人力资源 5、其他。业务管理包括销售、财务、人力资源、生产制造等各个部门以及业务管理相关的应用。这些具体的管理体系是由不同的组织结构、资源和职能所组成的一个整体。 一、业务战略 根据业务目标制定不同的业务战略。有:1)实现既定目标…

    2022年11月6日
    45400
  • 工作流管理工具有哪些

    工作流管理工具有:1.Agiloft;2.K2 Blackpearl ;3.Lucid Chart;4.Navvia;5.Appian;6.SYDLE SEED;7.Agile Point;8.WorkflowXPert.NET;9.Bizagi;10.Smart Draw。目前市面上的工作流管理工…

    2022年11月15日
    25800
  • 团队管理需要有哪些能力

    团队管理应具备以下能力:1、沟通能力;2、协调能力;3、规划与统整能力;4、决策与执行能力;5、培训能力;6、统驭能力。团队就是一群人为了共同的目标集结在一起相互协作,而作为团队管理者要想带好团队,让大家拧成一股绳朝着目标努力。 一、沟通能力 为了了解组织内部员工互动的状况,倾听职员心声,一个管理者…

    2022年11月6日
    99100

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部