地下迷宫探索 java

从嵌入式到云,使用Java 8实现。

包含Java SE 8和Java ME 8的Java 8可能是Java平台最重要的扩展。

Lambda表达式和Stream API增强了平台的表达能力,并使开发人员更容易利用现代的多核处理器。 Java SE 8中的Compact Profiles允许开发人员仅使用平台的一部分,并且是Java SE和Java ME融合的重要一步。 同时,对Java ME 8本身进行了更新,以包含最新的Java虚拟机(JVM),语言和库功能,同时将重点放在小型嵌入式设备上。 Java 8允许开发人员在从最小的嵌入式物联网(IoT)设备到云中的企业服务器的各种场景中应用相同的技能。

正如Oracle Java平台小组的首席架构师Mark Reinhold所说,“ Java 8是我们很长时间以来所做的第一个真正革命性的发行版。”

在这里,我们看一下Java 8的八个关键部分。

  1. Lambda表达式
  2. Nashorn和JavaScript
  3. 紧凑型材
  4. 日期和时间API
  5. JavaFX 8
  6. 社区参与
  7. Java ME 8
  8. Java SE 8和JVM

1. Lambda表达式

Lambda表达式是Java SE 8的核心。“ Lambda表达式,也称为闭包,是为开发人员提供一种简单而紧凑的方式来将行为表示为数据的匿名方法,” Oracle Java语言架构师兼规范负责人Brian Goetz解释说。 JSR 335,Java编程语言的Lambda表达式。 “这使开发能够更好地抽象行为的库的开发成为可能,这反过来又导致了更具表现力的,更少出错的代码。”

Java一直提供合理的工具(例如类,继承和泛型)来对数据进行抽象,而Java SE 8提供了新的工具来对行为进行抽象。 正如Goetz解释的那样,“如果我们要对工作流进行建模,例如'在开始之前进行A,对该组中的每个文件进行B,在遇到错误时进行C,在完成时进行D,'没有理想的工具来表达行为A到D,这会影响我们设计的API的种类。 我们必须分解工作流程的各个阶段,并且客户代码必须直接参与每个阶段,而不是说“这就是我想要的; 去这样做。' 这会对可重用性,可读性和性能产生负面影响。”

根据Goetz的说法,典型的开发人员对lambda表达式的最初体验很可能是通过功能强大的新API来操作集合。 业务逻辑通常在集合中充满了类似查询的临时查询计算。 核心库现在使表达这样的查询的“内容”变得更加容易,而又不会陷入“如何”的细节中。

Java SE 8的另一个主要语言功能是默认方法,该默认方法使接口能够随着时间的推移而发展。 鉴于某些核心库类(例如Collections)已使用15年以上,因此Java SE 8必须使用默认方法。 没有默认方法,某些核心库类将无法支持lambda。

Goetz解释说:“更笼统地说,如果您希望图书馆长期保持相关性,它们需要灵活,因此我们需要在保持兼容性的同时解决这一问题。”

当被问及Java开发人员在使用lambda时面临的挑战时,Goetz感到乐观。 他说:“最大的挑战是,接受这不仅仅是简单的新语法问题;它是一种新的挑战。” 即使不打算在编写的代码中利用这些新功能,开发人员也必须学习一些新概念,以便能够阅读Java代码。 开发人员必须学习的核心库中也有很多新增内容,但是这些成本应该被生产力和表达能力的提高所抵消。

Goetz毫不掩饰对lambda的热情:“我认为这是Java编程模型有史以来最重大的升级-但是,它仍然感觉像我们知道和喜欢的Java,”他坚持说。 “几年后,开发人员会想知道没有它,他们将如何生活。 我当然知道!”

“ Nashorn是Java SE 8的一部分,旨在提供将在JVM中运行JavaScript版本–使用更新的JVM技术JavaScript的更现代版本,” Oracle多语言工程主管Jim Laskey指出。 在Java SE 8中,Nashorn作为嵌入式JDK中的javax .script引擎提供,这意味着任何Java应用程序现在都可以包含用JavaScript编写的组件。 JavaScript是一种流行的语言,其功能类似于Java的功能,非常适合跨网络传输代码。 此外,现在有一个命令行工具( jjs ),允许开发人员将Nashorn用作脚本工具。 Nashorn取代了Rhino,后者也是一个开放源代码JavaScript引擎,它不仅速度更快,更轻巧,而且更紧密地集成了JavaScript和Java。

因此,JavaScript开发人员可以利用通常仅Java开发人员可以使用的大量库,并可以使用更简单,轻便的编程语言来实现其应用程序的某些部分。 开发人员现在可以实现运行时动态功能并绕过构建周期,而用户和现场工程师可以在不重新构建应用程序的情况下进行配置更改。 他说:“ Nashorn将允许以前所未有的方式使用JavaScript。”

Laskey很快指出:“尽管Nashorn JavaScript与浏览器JavaScript不同,并且目前缺少DOM组件,但它是一种功能齐全的编程语言,可以访问所有可用的Java库。”

Compact Profiles是Java 8规范的三个定义明确的API子集,提供了Java ME Con​​nected Device Configuration(CDC)与Java SE 8的融合。有了完整的Java 8语言和API支持,开发人员现在拥有一个单一的规范即可支持Java SE框架下的Java ME CDC类设备。 多年来,嵌入式开发人员一直希望允许Java SE平台子集化,以便在其嵌入式设备中部署较小的二进制文件。 紧凑的配置文件允许创建不需要在小型设备上部署和运行整个平台的应用程序。 由于紧凑型配置文件比完整的Java SE Java运行时环境(JRE)小得多,因此它们使应用程序可以部署在存储空间有限的平台上。 这些运行时中最小的是11 MB,比等效的传统JRE小四倍以上。

现在,通过针对Compact Profiles中可用的特定API,可以将Java SE应用程序设计为在资源受限的设备上运行。 Compact Profiles主要是为希望使用Java来创建静态和动态存储空间有限的嵌入式解决方案的嵌入式开发人员而设计的。 通过将RAM和闪存的数量保持在最低水平,嵌入式设备的物料清单(BOM)成本也保持在最低水平,从而为设备分销商增加了利润。

Oracle咨询工程师Bob Vandette总结道:“随着Compact Profiles的推出,我们现在有了一个Java SE标准,它具有Java闻名的所有生产力,可以真正地从小型嵌入式IoT设备扩展到大型企业。服务器安装。”

Java SE 8引入了一种新的java.time API,该语言具有流利和熟悉的样式,无需IDE即可轻松读写。 它为全球企业使用的国际ISO 8601时间标准提供了出色的支持,并且还支持频繁使用的日本,民国,回教和泰国佛教历法。 每个新的Java核心类(针对日期,时间,组合的日期和时间,时区,瞬间,持续时间和时钟)都有特定的用途,并且具有明确定义的行为而没有副作用。 在多任务环境中使用时,这些类型是不可变的以简化并发问题。 此外,API的可扩展性允许添加新的日历,单位,日期字段和时间。 开发人员可以专注于完成特定任务,而不必担心无关的功能。

新的API使用不可变值,每次计算都会产生一个新值。 Oracle技术人员咨询顾问Roger Riggs解释说,使用不可变对象,实例可以与库或并发任务共享,而不必担心值会意外更改。 这与具有 可变值且不是多线程安全 的当前 DateCalendar 类型 形成对比 。 使用不可变值消除了多线程编程的许多问题。

Riggs解释说:“当前的DateCalendar API在每种类型中都结合了许多功能,通常会导致意想不到的交互,从而增加编程复杂性。” “新的API提供了更清晰的用途,易用性和维护性。”

“ JavaFX 8与Java SE 8集成在一起,并且可以很好地与lambda表达式一起使用。 它简化了许多代码,例如事件处理程序,单元值工厂和TableView上的单元值工厂。” Oracle客户Java架构师Richard Bair解释说。 “它带来了一些急需的新UI控件和API,例如TreeTableView和启用模式对话框的API。”

Bair说,此外,JavaFX 8为场景图提供了一个强大的富文本节点,并且Java社区正在快速开展多个项目,这些项目在此支持的基础上构建了富文本和代码编辑器。 此外,JavaFX应用程序的默认外观已通过名为“ Modena”的新主题进行了刷新。 JavaFX 8还提供了对第三方组件的增强支持,其中许多组件现在都可以直接使用。 他说,以上所有这些都将提高JavaFX开发人员的生产力。

在性能方面也取得了很大进步,这主要是由于努力将JavaFX引入到Raspberry Pi和Freescale i.MX 6板等嵌入式设备上。 Bair补充说,JavaFX对3D的支持增加为开发人员带来了新的机遇,AMD为OpenJFX贡献了COLLADA导入器功能,OpenJFX是一个活跃而繁荣的社区。

“新的Scene Builder 2,这是第一个实际上由Scene Builder构建的Scene Builder,具有出色CSS检查器,因此开发人员可以更好地理解为什么按原样设置样式”,Bair解释说。 它也是模块化的,可以嵌入任何IDE中。 Scene Builder 2与FXML(一种开放和已发布的格式)一起使用,因此开发人员可以直接修改FXML文件。 他补充说:“我鼓励大家下载JavaFX 8,并进行尝试,并向团队提供反馈。”

Java社区对于Java 8的创建至关重要。它已向规范负责人提供持续的反馈,对Java新功能提出了要求,发现了bug,为代码修复做出了贡献等等。

作为Java社区学习和参与的中心的Java用户组(JUG)至关重要。 正如Java冠军兼SouJava JUG负责人Bruno Souza解释的那样,“ Java 8为社区参与树立了新标准。 世界各地都有Java用户组在运行程序,并提供有关JCP规范的反馈,并在OpenJDK中处于活动状态。” OpenJDK社区是开发人员在Java SE平台的开源参考实现上进行协作的地方。

旨在鼓励JUG成员,个人和其他组织参与JSR的Adopt-a-JSR计划不仅增加了基层和开发人员对Java 8的支持,而且也促进了其他新兴标准的参与。 超过26个JUG参加了该计划。

Java Community Process(JCP)具有增强的开放性和灵活性,使组织和个人都可以更轻松地为Java平台做出贡献。 “ JCP现在的流程更加透明,” Souza说。 “有人去JCP站点并参与其中要容易得多。 透明度的提高使社区更容易参与。”

“ Java ME 8是Java ME和Java SE融合以及Java生态系统统一的重要一步,它使Java开发人员可以利用Java ME 8的丰富性和可移植性,更轻松地在各种嵌入式设备上部署其现有技能。 Java平台”,Oracle的高级技术专家兼产品经理Terrence Barr解释说,他专注于IoT和嵌入式技术。 “这将缩短上市时间,并实现跨平台兼容性和嵌入式设备可扩展性。”

随着Java ME 8的出现,开发人员可以利用他们现有的技能,并使用相同的熟悉的平台,语言,编程模型和工具,为快速发展的嵌入式设备领域编写应用程序。 凭借不断变化的嵌入式空间和快速发展的IoT,Java ME 8提供了灵活且可扩展的开发/部署环境。

有关详细信息,请参见本期的“ Java ME 8和物联网 ”。

“ Java SE 8提供了改进的,更成熟的G1垃圾收集器。 G1的可扩展性越来越好,并且更多的工作正在同时进行。” Oracle技术人员首席成员Jon Masamitsu解释说。 “ G1的基本设计没有改变,但是在许多方面,朝着更可靠的暂停时间进行了逐步改进。 更一般地,在所有垃圾收集器中,命令行标志现在更加一致,并且标志差异已得到纠正。 这应该使用户更容易在不同的垃圾收集器之间进行切换,并在可能的情况下使命令行标志具有共同的含义。”

此外,Java SE 8消除了对永久代进行调整的需要。 Java HotSpot VM对Java类的内部表示已进行了重新设计,并移出了永久代(已完全删除),并移入了本机内存和/或Java堆中。 以前,调整永久代的大小是一个烦人的,反复试验的过程。 永久代的最大大小必须在启动时设置,并且没有直观的方法知道应该有多大。 开发人员不再需要猜测永久代的大小。

最后,Java ME 8已使用JVM,语言和库进行了更新,以与Java SE 8保持一致。

使用Lambda简化查询和计算

Java语言架构师 Brian Goetz展示了如何增强Java核心库,以对集合进行更多查询式的计算。

“考虑一下'找到专辑中曲目少于八首的艺术家。' 这很容易用for循环编写,但是结果代码中充满了关于“方式”的偶然细节,这使“什么”变得模糊不清。”他说。 在Java SE 8中,它看起来像这样:

Set<artists> artists =albums.stream().filter(album -> album.getTracks().size() < 8).map(album -> album.getArtist()).collect(toSet());</artists>

“在这里,我们说过'给我们专辑的元素,选择少于八首曲目的曲目,让每首曲目都获得艺术家的认可,然后将它们收集到一组中。' 代码读起来就像问题陈述一样,这很好,因为易于阅读的代码也更有可能是正确的。” Goetz说。

从手写循环到使用lambda和数据流的聚合操作的这种转换会颠倒计算的控制。 Goetz说:“有了for循环,客户端就可以控制每个步骤,并在每次迭代时向Iterator询问下一个元素。” “借助lambda和流,该库处于控制之中,但仍允许客户端轻松自定义计算。”

他继续解释说:“在上面的相册计算中,看起来我们正在对数据进行三遍,但实际上这三遍融合在一起。 这之所以可能,是因为客户端能够一次表达自己想要的一切,用各种行为参数化步骤,而不是参与每次循环迭代。”

旋转一下

总而言之,Java 8为Java开发人员提供了增强创新的新机会,这些Java开发人员可在从微型设备到基于云的系统等各种设备上进行操作。 通过减少样板代码和lambda提供的并行编程,我们可以期望提高开发人员的生产率和应用程序性能。 Java 8提供了一流的诊断程序,并带有完整的工具链,可以连续收集低级和详细的运行时信息。

通过将Java SE的优势带到嵌入式开发中,开发人员可以将其Java技能转移到物联网中快速发展的新领域,从而使Java支持任何大小的设备。 成为一名Java开发人员是一个激动人心的时刻,所以快来看看,并告诉我们有关的旅程。

最初发表于2014年3月/ 4月的Java Magazine 。 立即订阅 。

关于作者

  蒂莫西·贝内克Timothy Beneke) 是自由撰稿人和编辑,以其有关性别的书籍而闻名。

(1)最初发表于Java Magazine 2014年3月/ 4月版
(2)版权所有©[2014] Oracle。

翻译自: https://jaxenter.com/java-8-explore-the-possibilities-107722.html

地下迷宫探索 java

地下迷宫探索 java_Java 8:探索可能性相关推荐

  1. 【后两个测试点】地下迷宫探索 (30 分)

    立志用最少的代码做最高效的表达 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活 ...

  2. 7-33 地下迷宫探索 (30 分)(思路加详解)

    一:题目 7-33 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰 ...

  3. 7-2 地下迷宫探索 (30 分)(C语言实现)

    7-2 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争 ...

  4. 7-9 地下迷宫探索 (8 分)

    7-9 地下迷宫探索 (8 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生 ...

  5. 7-2 地下迷宫探索

    7-2 地下迷宫探索 分数 30 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村 ...

  6. 7-3 地下迷宫探索(30 分)(dfs)

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  7. 地下迷宫探索 30分 dfs

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  8. 7-33 地下迷宫探索 (30 分)

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  9. pta 地下迷宫探索

    5-5 地下迷宫探索   (30分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战 ...

最新文章

  1. C语言数组只会输出两个!_只愿与一人十指紧扣_新浪博客
  2. 准确率precison与正确率accuracy区别
  3. 如何使用jsp自定义标签 JspTag 使用入门
  4. JavaScript (二)
  5. Apple 预计于内华达州雷诺市再盖一个数据中心
  6. 意大利归还中国文物;翟天临咪蒙成考公务员题目;携程回应五一机票涨价;腾讯未成年人网络保护体系上线;这就是今天的大新闻...
  7. Go中new和make的区别
  8. Android nfc编译,【Android编译】各个模块编译方法
  9. 分类学计算机面试什么,史上最全的机器学习面试题-机器学习爱好者必看
  10. [转] Asp.net Session常见问题集锦
  11. BUAAOO第二单元总结之电梯问题
  12. Caffe ImageNet例程翻译
  13. 计算机网络的简单概述以及在浏览器中输入一个网址后如何执行
  14. SG90舵机驱动程序
  15. hdu2825(状压dp+AC自动机)
  16. 计算机网络面经八股文
  17. 用 JAVA 开发游戏连连看
  18. 激活时显示图片上传资源服务器失败,720全景图上传时提示“切图失败”的处理办法...
  19. 天气学诊断实习四 计算垂直速度
  20. 飞思卡尔微控制与MSCAN ----自学笔记

热门文章

  1. 对AES 128和256位加密解密性能对比
  2. 用pycharm创建数据库sqlites3表格,但是打开并不显示
  3. RationalDMIS 2020 叶片检测 -快速定义叶片截面线方法
  4. linkerd 本地环境安装
  5. 大连大学计算机科学与技术研究生毕业工资,大学研究生毕业的你,现在一个月的月薪多少?现实让人想哭!...
  6. 概要设计和详细设计模板_网站模板不用设计 直接下载免费网站模板
  7. php如何把word转图片
  8. 你的计算机毕业设计怎么写——教你点科技与狠活
  9. 程序员女盆友的学习日记(没内容)
  10. 狄拉克δ函数的数学迷思