设为首页 - 加入收藏 徐州站长网 (http://www.2g-flowers.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 收入 2015 手机 开发
当前位置: 金亚洲注册 > 运营中心 > 网站设计 > 教程 > 正文

初识Java 9??榛喑?/h1>
发布时间:2018-08-21 16:46 所属栏目:[教程] 来源:周明耀
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 【51CTO.com原创稿件】本文是Java9系列文章的第一篇,我会通过几篇文章系统性地介绍Java9的新特性。Java9的发布对于Java语言来说是新的开始,希望Java能够一直走下去,因
技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

金亚洲注册 www.2g-flowers.com 【51CTO.com原创稿件】本文是Java9系列文章的第一篇,我会通过几篇文章系统性地介绍Java9的新特性。Java9的发布对于Java语言来说是新的开始,希望Java能够一直走下去,因为它是太多程序员赖以为生的编程工具。

Java9

一、??榛侍?/p>

我一直认为,Java这门编程语言已经不再仅仅是一门语言,它是一个由使用者根据自身工程需要所构建起来的生态环境。既然是生态环境,它必然需要根据外部环境的变化不断调整自己,不断地吸收外部优良的设计方案,以用来不断地加强自身,也必然需要不断地改变扩大自己的范围,这样也就不再仅仅局限于语言本身。

我们学习??榛喑讨?,应该想想为什么Java需要引入??榛杓扑嘉?首先让我们看看自己打包的jar文件。我们每天在构建的应用程序,也许大家编码是基于某种框架,例如Spring Cloud,基于Spring Cloud可以很方便地启动微服务应用,但是Spring Cloud背后引用了大量的Java生态环境里的第三方库。

长期来看,应用程序如果缺乏结构化设计思维,最终一定会付出代价?;氐礁詹诺奈侍?,??榛喑涛裁椿岢鱿?因为它的出现可以让我们更为简便、有效地管理库之间的依赖关系,进而减少了工程的复杂度。大家要问了,不是有Maven可以实现这样的功能吗?对的,Maven确实可以,现在Java在JDK库内设计思维上吸收了Maven的设计思维优点,这样JDK内部也有了??榛杓?。

需要注意的是,??榛喑滩⒉皇且幌伦映鱿值?,它会出现首先是基于Java本身就是面向抽象编程的,也就是说,??榛喑淌枪菇ㄔ诔橄蟛阒系?。相较于Java8引入的lambda表达式,??榛喑坦刈⒌氖钦鲇τ贸绦虻慕峁估┱刮侍?,而lambda表达式更多的是提供了在一个类里面切换到lambda的方式。??榛吹挠跋焐婕暗缴杓?、编译、打包、部署等等,所以我前面讲了,它不仅仅是一个语言级的特性变化,它的意义比lambda表达式的引入大很多。

开始全文前最后一个问题,为什么JDK9一再推迟发布时间?JDK9的??榛こ涛舜锏皆て谀勘?,即功能之间的边界清晰目标,同时又要保持向后兼容、??槟诙ㄒ辶己们铱啥?,这些多重要求导致了JDK9的长时间难产。这就好比我们编写的应用程序工程,通过20年的积累,成为了一个巨大无比的工程,这时候你再想把它按照??榍蟹?,难度就非常高了。

Java语言已经积累了20年,现在才开始做??榛杓?,其实是有点晚了,但是一旦做成了这件事情(JDK9的??榛?,后续的??榛叹突岜涞每焖倨鹄?,这也就是为什么可能半年后你就会发现JDK10发布了。

二、??榛喑?/p>

1. 什么是??榛喑?/p>

什么是??榛喑???榛喑淌墙械南低撤纸馕舾筛鲎约汗芾淼哪??,但是这些??橹溆质腔ハ嗤ㄐ?连接)的。???,或者可以称之为组件,也就成了一个个可以识别的独立物件,它们可以包括代码、元数据描述,以及和其他??橹涞墓叵档?。理想地看,这些物件从编译时期开始就是可以被识别的,生命周期贯穿整个运行时。这样也就可以想象了,我们的应用程序在运行时应该是由多个??樽槌傻?。

作为一个Java???,必须满足三个基本要求:

(1) 强封装性

对于封装的重要性应该不用和大家解释了,两个??橹浣鲂枰蓝苑降姆庾敖涌?、参数、返回值,而对于它内部的实现细节,其他调用方并不关心,内部怎么变化都没关系,只要能够继续调用并返回正确的值就行。

(2) 定义良好的接口

这里包含两层意思。一是??橹涞谋呓缫智宄?,不能存在重复的部分,二是对于无法封装的公开代码,如果进行了破坏性的修改,那么对其他调用方来说也是破坏性的,因此需要提供定义良好并且稳定的接口给其他调用??榈饔?。

(3) 显式依赖

这是点和面的关系。每一个点代表一个???,两点之间的线代表??橹涞囊览倒叵?,所有点就组成了??榈饔霉叵低?。只有拥有清晰的??榈饔霉叵低?,我们才能确保调用关系的正确性和??榕渲玫目捎眯?。Java9之前,我们可以采用maven来帮助管理外部依赖关系。

??榛吹氖橇榛?、可理解、可重用这三大优点。??榛喑毯偷苯窈芏嗳砑芄垢拍钍抢嗤?,都是为了解决相似的抽象层问题,例如基于组件的开发、面向服务系统架构,或者更新的微服务架构。

前面提到了三个基本要求,强封装性、定义良好的接口、显式依赖,其实在Java9之前就已经支持了。比如封装,类型的封装可以通过使用包和访问修饰符(例如public、protected、private)的组合方式完成。例如protected,只有在同一个包内的类才能访问protected类里面的方法。这里你就可以提出一个问题来了。

如果我们想要让一些包外的类可以访问protected类,又不想让另外一些包外的类可以访问,这时候应该怎么处理呢?Java9之前没有很好的解决方案。对于第二个要求,定义良好的接口,这一点Java语言一直做得不错,从一开始就做得不错。你会发现接口方式在整个??榛喑讨邪缪萘酥行慕巧?。

对于显式依赖,由于Java提供的import关键字所引入的jar包需要在编译时才会真正加载,当你把代码打入jar包的时候,你并不知道哪一个jar文件包含了你的jar包需要运行的类型。为了解决这个问题,我们可以利用一些外部工具,例如Maven、OSGi。Java9虽然从jvm核心层和语言层解决了依赖控制问题,但是Maven、OSGi还是有用武之地的,它们可以基于Java??榛喑唐教ㄖ霞绦中约旱囊览倒芾砉ぷ?。

应用程序的jar包关系图

图1:应用程序的jar包关系图

上面这张图包含了两个部分,一部分是应用程序,包含Application.jar的应用程序jar包、该jar包的两个依赖库(Google Guava和Hibernate Validator),以及三个外部依赖jar包。我们可以通过maven工具完成库之间的依赖关系绑定功能。

Java9出现之前,Java运行时还需要包含rt.jar,如上图所示。从这张图上至少可以看出没有强有力的封装概念,为什么这么说?以Guava库为例,它内部的一些类是真的需要被Application.jar工程使用的,但是有一些类是不需要被使用的,但是由于这些类的访问限制符也是public的,所以外部包里的类是可以访问到的,所以说没有履行Java9的封装要求。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论

推荐文章