Java SE 8新功能导览:Java开发世界中的重大变化

与其他专业团队成员一样,我是采用OpenJDK的成员之一,但是从最近8个月开始加入,我们经历了Java SE 8 开发,编译,编码,讨论等各个阶段,直到将其付诸实践为止。 。 它于2014年3月18日发布,现在可供您使用。

我很高兴宣布本系列“ Java SE 8新功能之旅 ”,我将在其中编写示例,以简化Java SE 8知识的获取,开发经验,新功能以及将利用您的知识的API,增强您的编码方式,并提高生产率。 希望您喜欢它,就像我在编写时一样。


我们将浏览Java SE 8(项目和API)中的新主要和重要功能,该平台旨在支持更快,更轻松的Java开发。 我们将学习Project Lambda ,这是一种支持Java代码中lambda表达式的新语法。

检查新的Stream API以处理集合并管理并行处理。

使用DateTime API计算时间跨度,以表示,管理和计算日期和时间值。

除了Nashorn之外,新的引擎还可以更好地支持Java虚拟机使用JavaScript代码。

最后,我还将介绍一些鲜为人知的功能,例如将字符串连接到列表的新方法,以及其他将在日常任务中为您提供帮助的其他功能。

有关Java SE 8功能和教程的更多信息,我建议您也参考Java教程官方网站和Java SE 8 Java API文档 。

我们将在本系列中讨论的主题包括:

  1. 安装Java SE 8,注意事项和建议。
  2. 引入Java SE 8的主要功能后,变化很大。
  3. 使用lambda表达式和方法引用。
  4. 使用流遍历集合。
  5. 使用新的DateTime API计算时间跨度
  6. 使用Nashorn从Java运行JavaScript。
  7. 其他新功能和API更改。
  1. 安装Java SE 8,注意事项和建议。

    1. 在Windows上安装Java SE 8

      为了在Microsoft Windows上运行Java SE 8,请首先检查您拥有哪个版本。 Windows 8、7,Vista和XP支持Java SE 8。 具体来说,您将需要这些版本。 对于Windows 8或8.1,您需要Windows的桌面版本。 不支持Windows RT。 您可以在任何版本的Windows 7以及最新版本的Windows Vista和Windows XP上运行Java SE 8。 在基于Server的Windows版本上,您可以运行2008和64位版本的2012。如果要在Java Applet上运行,则需要64位浏览器,这些浏览器可以包括Internet Explorer 7.0及更高版本,Firefox 3.6和更高版本。以上版本以及Windows上支持的Google Chrome,但Mac上不支持。您可以从以下网址下载Java SE 8的Java开发者工具包:

      1. URL java.oracle.com它将带您到当前的Java主页。
      2. 单击Java SE。
      3. 在热门下载下。 然后单击Java 8的下载链接。
    2. 在Mac上安装Java SE 8

      为了在Mac OS X上使用Java SE 8,必须具有运行Mac OS X 10.7.3的基于Intel的Mac,即Lion或更高版本。 如果您使用的是Mac的旧版本,则将无法编程或运行Java 8应用程序。 为了安装Java SE 8,您需要在Mac上具有管理权限。 为了在浏览器中运行Java applet,您需要使用Safari或Firefox之类的64位浏览器.Google Chrome是32位浏览器 ,并且不能用于此目的 。 Windows上的SE,同一网站上有MAC OS .dmg版本可供下载和安装。 实际上包含所有操作系统版本。 但是,我们的重点是Windows和MAC。

    现在,您可以在Windows和MAC OS X平台上开始使用Java SE 8进行编程了。

    大概安装了Java SE 8之后,让我们深入了解第一点,并简要地了解一下Java SE 8的主要功能,以开始我们最喜欢的IDE的编码之旅。

  2. 引入Java SE 8的主要功能后,变化很大。

    JSR 337:Java SE 8发行内容概述

    Java SE 8是Java编程语言和Java虚拟机的主要发行版。 它包括许多更改。 有些文章比Lambda表达式等文章有更多的报道,但是我将同时讨论主要变化和一些次要变化。

    JSR 335:Lambda表达式

    可能最受关注的是Project Lambda,这是一组新的语法功能,可让Java开发人员充当函数程序员。 这包括lambda表达式,方法引用和其他一些功能。

    JSR 310:日期和时间API

    有一个用于管理日期和时间的新API。 替换旧的类。 这些较旧的类仍在Java Runtime中,但是在构建新应用程序时,您可能希望移至这套新功能,这些功能可以简化代码并更加直观地编程。 有一些新类可以管理本地日期,时间和时区,以及计算不同时间之间的差异。

    流API

    添加了用于管理集合的新工具,包括列表,地图,集合等。流允许您处理集合中的每个项目,而无需编写明确的循环代码。 它还使您可以将处理分为多个CPU。 因此,对于大型,复杂的数据集,您可以看到显着的性能提升。

    纳斯霍恩项目

    Nashorn JavaScript引擎也是Java SE 8的新功能。 这是一个全新JavaScript引擎,从头开始编写,可以使用JavaScript进行编码,但可以集成Java类和对象。Nashorn的目标是在Java中使用本机JVM实现轻量级高性能JavaScript运行时。 该项目旨在使Java开发人员能够通过JSR-223在Java应用程序中嵌入JavaScript,并使用jrunscript命令行工具开发独立JavaScript应用程序。在有关Nashorn的文章中,我将介绍如何从命令行运行Nashorn代码。 还有如何在单独的文件中编写JavaScript,然后从Java代码执行这些文件。

    并发API增强。

    并发框架也有增强,使您可以管理和累积多个线程中的值。 还有很多较小的变化。

    字符串,数字有新工具

    在字符串类和其他新类中,有一些用于创建分隔列表的新工具。 有一些用于汇总数字的工具,包括整数,双精度数,双精度数等等。

    其他新功能

    还有一些工具可以更好地检测空情况,我将在本系列中介绍所有这些工具。

    我将介绍如何使用新的便捷方法来处理文件。

那么,Java SE 8何时可用?

答案是,现在。 它于2014年3月18日发布。对于使用Java构建客户端站点应用程序的开发人员,JavaFX富互联网应用程序框架现在支持Java 8。 而且大多数Java企业版供应商也都支持Java 8。 是否立即迁移到Java SE 8取决于您正在处理的项目类型。

对于许多服务器和客户端站点应用程序,它立即可用。

尚不支持Android。

Android开发人员要当心; 目前,Android不支持Java SE 8语法和API。

直到最近,Android才采用了一些最新的Java 7语法。 因此,Android可能需要一些时间才能支持此最新语法或最新API。 但是对于所有其他Java开发人员来说,值得一看的是这些新功能。

那IDE呢?

所有主要的Java开发环境都支持Java SE 8。 包括Oracle的NetbeansIntellij IdeaEclipse 。 在本系列中,我将使用Netbeans版本8在Netbeans中进行所有演示,可以从https://netbeans.org/downloads/下载。

但是,在开始研究本系列之前,让我们先检查一下,我们可能已经安装了Java SE 8,并在Netbeans下启动了一个新项目,该项目将包含我们将要编写的所有代码。 然后开发一个lambda代码来测试我们的项目是否可以在Java SE 8中正常工作。

或者,您可以从我的Github帐户下载系列源代码,使用Netbeans打开它,然后按照我接下来显示的内容以及即将发布的系列代码进行操作。

Github上的项目: https : //github.com/mohamed-taman/JavaSE8-Features

带有Lambda表达式的Java SE 8上的Hello world应用程序。

步骤(如果浏览我的代码,则不需要):

  1. 打开NetBeans 8 –>从文件–>新建项目–>从左侧,然后选择Maven –>从右侧,然后选择Java应用程序 –>单击下一步。
  2. 请遵循以下屏幕截图变量定义,或更改为您喜欢的名称和值–>然后单击“完成”。
    JDK8-SES-P1-1
  3. 如果一切正常,则在项目导航器上应具有以下结构:
    JDK8-SES-P1-2
  4. 单击项目“ Java8Features” –>单击“ 文件” ,从上层菜单–>然后单击 项目属性”
  5. 类别 ->从左侧选择Source ,然后检查“ Source / Binary format”是否为1.8。 –>从左侧打开Build ,然后选择Compiler ,然后检查“ Java Platform”是否指向您当前的JDK 8安装–>单击“ 确定”
  6. 如果没有JDK 8,则转到工具 –>选择, Java平台 –> 添加平台 –>然后选择Java标准版 –>然后指向已安装的JDK 8。
  7. 现在我们的项目已配置为可与Java 8配合使用,因此让我们添加一些Lambda代码。
  8. “ eg.com.tm.java8.features”包上,右键单击,然后从菜单“ –eg.com.tm.java8.features.overview”下的菜单中选择“ 新建” ->“ Java接口” ->“将其命名为可打印 ”。单击完成
  9. 实现Printable接口,如下所示:
    /** Copyright (C) 2014 mohamed_taman** This program is free software: you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation, either version 3 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program.  If not, see <http://www.gnu.org/licenses/>.*/package eg.com.tm.java8.features.overview;/**** @author mohamed_taman*/
    @FunctionalInterface
    public interface Printable {public void print();
    }
  10. 在同一程序包上添加以下名为“ Print”的类,其主要方法如下:
    /** Copyright (C) 2014 mohamed_taman** This program is free software: you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation, either version 3 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program.  If not, see <http://www.gnu.org/licenses/>.*/package eg.com.tm.java8.features.overview;import static java.lang.System.out;
    /**** @author mohamed_taman*/
    public class Print {public static void main(String[] args) {Printable job = ()-> out.println("Java SE 8 is working "+ "and Lambda Expression too.");job.print();}}
  11. 右键单击Print class并选择Run 。 如果一切正常,那么您应该看到以下输出。
    ------------------------------------------------------------------------
    Building Java8Features 1.0-SNAPSHOT
    ------------------------------------------------------------------------
    --- exec-maven-plugin:1.2.1:exec (default-cli) @ Java8Features ---
    Java SE 8 is working and Lambda Expression too.
    ------------------------------------------------------------------------
    BUILD SUCCESS
  12. 祝贺您的Java SE 8项目运行良好,让我们解释一下我们编写的内容。

    这些代码大多数都可以在Java 7上运行 ,但是Java SE 8中在此处添加了一个注释,即FunctionalInterface 。 如果未正确为Java 8配置Netbeans环境,则此注释将导致错误,因为它不会被识别为有效的Java代码。 我没有看到任何错误,因此这很好地表明Eclipse正在按我的期望工作。

    接下来,我将打开名为Print.java的此类定义。 这是具有主要方法的类,因此我可以将其作为控制台应用程序运行,并且它具有新的Java 8语法的关键行。

    它正在创建一个功能接口的实例,我刚刚使用lambda表达式向您展示了,该表达式是Java在Java 8之前不存在的一种语法样式。我将在下一篇文章的早期部分解释这种语法的作用。

    但是,您现在只需要知道,如果这段代码没有引起任何错误,那么Netbeans就会再次将其识别为有效的Java语法。 我正在创建该接口的实例,然后调用该接口的print方法。 因此,我将运行代码。

    我将单击工具栏上的“运行”按钮,然后在控制台中看到成功的结果。 我创建了一个对象,它是使用lambda表达式的该接口的实例。 我已经调用了它的方法,并将其输出到控制台。 因此,如果一切正常,那么您的状态就很好。 您已经准备好开始在Netbeans中使用Java SE 8进行编程。 如果您在使用过程中遇到任何问题,请返回之前的步骤并逐步进行操作。 一次一步

资源:

  1. Java教程,Lambda表达式
  2. JSR 310:日期和时间API
  3. JSR 337:Java SE 8发行内容
  4. OpenJDK网站
  5. Java平台,标准版8,API规范

翻译自: https://www.javacodegeeks.com/2014/06/java-se-8-new-features-tour-the-big-change-in-java-development-world.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从Java官网下载最新的文档(包含API文档)

Java学习资料(适合c转java的同学)&#xff1a; Java中带包&#xff08;创建及引用&#xff09;的类的编译 - 小明快点跑 JAVA 对象引用&#xff0c;以及对象赋值 - 飘来荡去。 Java官网下载页&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/index.html…

babel安装

注意&#xff1a;如果没有装node.js&#xff0c;先去装一个&#xff01;&#xff01;安装node.js时会默认安装npm。 步骤&#xff1a; 1、新建一个文件夹&#xff0c;装接下来的所有东西。我新建了一个learn-es6文件夹 2、在learn-es6项目文件下创建根目录文件&#xff1a; …

针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom

为什么呢 很多时候&#xff0c;我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题。 为了提供解决方案&#xff0c;我经常最终会尝试项目结构&#xff0c;测试我在不同应用程序服务器上的部署并细化我的配置。 Maven对于新来者来说可能会有陡峭的学习曲线&a…

sql server 学习记录

sql-server 基础&#xff1a; 1、查看sqlserver的数据表 SELECT name,crdate FROM SysObjects Where XTypeU order by crdate desc 查看数据表的字段 SELECT A.name AS table_name,B.name AS column_name,C.value AS column_description FROM sys.tables A INNER JOIN sys.col…

mysql 子字符串函数_MySQL 内置字符串函数

MySQL内置函数concat()用于连接字段LTRIM(),RTRIM(),TRIM()分别用于去除左边空格,右边空格,以及左右空格都去除NOW()放回当前的日期和时间UPPER() 和LOWER()upper():转换为年夜写输出; lower() 转换为小写输出LEFT()返回串左边的字符RIGHT()返回串右边的字符,办法参考LEFT()LOC…

弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介

弱监督学习下商品识别&#xff1a;CVPR 2018细粒度识别挑战赛获胜方案简介 细粒度视觉分类&#xff08;FGCV&#xff0c;Fine-Grained Visual Categorization&#xff09;即识别细分类别的任务&#xff0c;一般它需要同时使用全局图像信息与局部特征信息精确识别图像子类别。细…

JS中apply和call的应用和区别

因为object没有某个方法&#xff0c;但是别的对象有&#xff0c;可以借助apply或call像别的对象借方法来操作。 猫吃鱼&#xff0c;狗吃肉&#xff0c;奥特曼打小怪兽。 有天狗想吃鱼了 猫.吃鱼.call(狗&#xff0c;鱼) 狗就吃到鱼了 猫成精了&#xff0c;想打怪兽 奥特曼.打小…

解题:NOIP 2018 保卫王国

题面 最小支配集全集-最大独立集 所以先把点权改成正无穷/负无穷来保证强制选/不选某个点到独立集里&#xff0c;然后变成了洛谷的动态DP模板 GTMDNOIP2018ZTY 1 #include<stack>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 using n…

petshop4学习_重构DataList实现分页

掌握要点: <IList>,DataGrid翻页事件...详细代码如下,慢慢体会..usingSystem;usingSystem.Collections;usingSystem.Collections.Specialized;usingSystem.Text;usingSystem.Text.RegularExpressions;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;namespaceCustom…

如何与Java 8,NetBeans Platform 8,Jenkins,Jacoco和Sonar进行持续集成

介绍 Java 8出现了&#xff0c;人们所期待的革命终于发布了&#xff0c;我敢肯定&#xff0c;你们中的许多人都在想着同样的问题“我应该在项目中使用它吗&#xff1f;”。 好吧&#xff0c;几个月来我遇到了同样的问题&#xff0c;今天我有一个答案想与大家分享。 很多方面都…

WSS学习(一)---简单部署图

研究了一段时间的WSS&#xff0c;终于找到点头绪了今天把这段时间的思路整理了一下&#xff0c;结果发现就是这么一张图也不知道研究的对不对&#xff0c;有高手发现不对的给点指点有也在研究的大家一起讨论一下简单说明&#xff1a;数据库用SQL2005&#xff0c;报表用SQL2005的…

Wildfly 8.0通过其JAXRS 2.0实现提供了无缝的JSON支持。

很高兴看到Wildfly 8.0使得使用同一组JAXB类中的XML和JSON表示 两者变得更加容易&#xff0c;而无需任何额外的检查或配置不同的JAXB运行时实现。 您需要做的就是 只需从JAXRS资源类中的业务方法中返回JAXB对象 将HTTP Accept标头设置为application / json 返回JAXB类的简单…

vue.config.js配置别名alias、配置生产环境清除console

项目中使用引入文件有时候路径比较深&#xff0c;需要使用"../../../xx.js"这种类似的路劲引入&#xff0c;这种方式比较笨&#xff0c;可以使用webpack的别名alias配置来解决。 首先&#xff0c;先确定项目中是否有path模块&#xff1a; 如果没有path模块需要先安装…

借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

AssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具。 不幸的是直到最近&#xff0c;还不能一起使用它。 但是随后Java 8进入了游戏&#xff0c;几十行代码足以使其在Awaility 1.6.0中实现。 AssertJ提供了一组丰富的断言&#xff0c;其中包含非常有用的错误消息…

小程序-冒泡事件

小程序冒泡事件与非冒泡事件 会随之触发父元素的称为冒泡事件&#xff0c;反之&#xff0c;则是非冒泡事件 wxml&#xff1a; <view class"view1" bindtap"view1click"> <!-- 用 bind 绑定事件 -->view1<view class"view2" bin…

mysql导出表结构 创建_mysql如何导出表结构为文本文件

Log Goup ID&#xff0c;可能会配置多个redo组&#xff0c;每个组对应一个id&#xff0c;当前都是0&#xff0c;占用4字节Start LSN&#xff0c;这个redo log文件开始日志的lsn&#xff0c;占用8字节Log File Number&#xff0c;总是为0&#xff0c;占用4字节Created By&#x…

CSS基础学习-15-1.CSS 浏览器内核

转载于:https://www.cnblogs.com/songsongblue/p/11047935.html

gitlab提交代码push,触发jenkins构建

一、安装插件 Build Authorization TokenRoot Gitlab Hook Plugin二、配置 在linux上执行命令 openssl rand -hex 12获得token&#xff1a; 632f873225efdb5b7e5da411 去掉jenkins的 CSRF Protection设置 找到触发构建的项目&#xff0c;修改触发器 在gitlab的项目中&#xff0…

5分钟搞定jQuery zepto.js 面向对象插件

今天分享一下快速使用jQuery zepto.js的技巧&#xff0c;需要的记得收藏 1.jQuery的引入&#xff1a;本地下载jQuery(后面简称jq)的源文件&#xff0c;开发版本使用非min版&#xff0c;线上使用min版&#xff0c;zepto.js类似&#xff0c;同样的一些基于jq的插件也是如此用法&…

在JDK 8中可通过反射获得构造函数/方法参数元数据

JDK 8较不为人所知的一项新 功能是在编译的Java类中包含参数元数据的可选功能[JDK增强建议&#xff08; JEP &#xff09; 118 ]。 此功能允许Java应用程序在运行时通过反射访问此参数元数据信息。 Java Tutorial的Reflection API路径包括一个名为“ 获取方法参数的名称”的课…