java为什么要用接口用Java

这篇文章专门给程序员写的,普通读者慎入。原作者:Kevin Sookocheff译者:Celia Zhen,原文点击文末链接。每当我告诉别人我一直在用Java工作时,大家的反应都是:“纳尼!Java?为啥是Java?”说实话,本人刚开始的时候也是同样的反应。但是由于Java的类型安全,执行性能和坚如磐石的工具,我渐渐地开始欣赏Java。同时我注意到,现在的Java已今非昔比——它在过去的10年间稳健地改善着。缘何是Java?假设每天都用Java的想法还没有让君恶心到食不下咽,我在此重申Java已非你所了解的“吴下阿蒙”了。当Python, Ruby, 和Javascript在“动态类型语言革命”(TM)(我自己造的名词)中大放异彩时,Java已经悄悄地借鉴了动态语言和函数式语言的很多吸引人的特性,同时保留了让Java和JVM晋级一流开发环境的先贤的努力成果。凭借大约9百万Java攻城狮的基层群体,Java仍然是世界上最受欢迎的编程语言。我们不能仅仅因为Java的语法有一点点繁琐,就抹杀掉它所有的历史和开发工作。但是流行不等同于正确。下面我们就来看看是什么让Java如此大放异彩。Java虚拟机(JVM)Java虚拟机(JVM) 已经诞生20年了。在此期间,它被部署在成千上万的系统上,历经了无数的漏洞修复和性能提升。JVM的优点有以下几个方面。首先,JVM完美支持日志和监控,这使你可以很方便地监控小到单个线程的性能指标。JVM有世界上最优化的垃圾回收器之一,你可以根据优化吞吐量等因素灵活选择垃圾回收算法。最后,Java承诺的“write once, run anywhere”终于得已实现——你可以轻松地在任何架构上部署一个Java应用(大家还是承认applet从来没有过吧)。为什么用Scala和Clojure这样新式语言的聪明人会选择JVM作为他们的执行环境呢?——因为JVM为你的代码提供了一个无出其右的分发环境。抛弃像JVM这样坚如磐石的工具是非常不合理的。库的支持如果你需要做点什么,很可能已经有非常好用且经过测试的Java库在等着你。Java库大部分都是成熟并用于实际生产开发的。Google, Amazon, LinkedIn, Twitter和很多Apache项目都很倚重于Java。如果你用了Java,你可以参考这些库和公司,从而借鉴伟大的程序员先驱们的工作。类型安全Java的类型系统,虽然有时很繁琐,但是这使得你可以写出“好用”的代码。不再有运行调试,它使你可以依靠编译器而不是单元测试——单元测试只在你知道bug在哪里的时候才有用。类型安全也使你轻松的代码重构。Java同时支持范型——Go语言的最大诟病之一。再者,Guava这样的库I以最小的样板和开销,标准化了创建类型安全的API的方法。 Java编译器的改进也意味着你可以在享受类型安全的同时最小化范型所需的样板代码。并发性下面这条tweet总结了大多数动态语言的并行状态:Most JS/Python/Ruby apps…/hkDkjdxpFH— Reuben Bond (@reubenbond)Java却有着对多线程和并行的一流支持。对于Java 1.7, 许并行的immutable数据结构令你轻松地在线程间共享数据。Akka库更进一步的提供了Erlang型的Actors来写并发和分布式的程序。我并不是在说Java比Go具有更好的并行支持,但是可以管理单个线程这一特性为Java应用提供了异步性能;而Python是做不到这点的。用最新的Java来编程现在你的心情可能已经从恶心变成好奇了,那么我们在2015年该如何写Java呢?从哪儿开始呢?首先,让我们回顾一些在Java7和Java8涌现的核心语言概念。迭代首先我们一起来看看迭代。下面是Java8中的for循环:List&String& names =newLinkedList&&; // compiler determines type of LinkedList// ... add some names to the collectionnames.forEach(name -& System.out.println(name));或者是被大大简化的for关键词?for(String name : names)System.out.println(name);这2种循环结构都比你平时看到的for循环简洁的多。Lambda函数上面提到的第一个for循环引入了Lambda函数这个新概念。Lamda函数,语法记作-&, 是Java语言的一项重大改革,并从函数式编程中引入了一些概念。下面来看几个Java中Lambda函数的例子。// Lambda RunnableRunnable r2 =
-& System.out.println("Hello world two!");// Lambda SortingCollections.sort(personList, (Person p1, Person p2) -& pareTo(p2.getSurName))// Lambda ListenertestButton.addActionListener(e -& System.out.println("Click Detected by Lambda Listener"));这里无法详细展开Lambda函数这个话题——/jvm/lambda-expressions-in-java-8/文章提供了一个很好的切入点来更多地了解Lambda函数。流Java 8引入了流(stream)的概念,这为Java提供了很多现代函数式语言的特性。流是一种对集合上的一系列转换延迟执行的机制。比如我们来数一下以’A’开头的名字。首先想到的方法肯定是像下面这样:List&String& names =newLinkedList&&;// ... add some names to the collectionlongcount =0;for(String name : names) {if(name.startsWith("A"))++}如果用流,上述就可以简化为首先将集合转换成流,然后使用函数:longcount = names.stream.filter(name -& name.startsWith("A")).Java同时支持用parallelStream来进行流的并行处理。并行流允许流水线业务在独立的线程同时执行,这不仅改进了语法,同时提高了性能。在大多数情况下,你可以简单得用parallelStream替换stream实现并行。Try-With-Resources结构在Java 6之前,打开一个文件然后读取内容需要通过try/finally来完成:staticStringreadFirstLineFromFileWithFinallyBlock(String path)throwsIOException{BufferedReader br =newBufferedReader(newFileReader(path));try{returnbr.readL}finally{if(br !=) br.但是readLine和close都有可能抛出异常。在这种情况下,readLine抛出的异常被忽略,我们事实上并不知道readLine执行失败。Java 7引入了 Try-With-Resources结构来克服这种缺陷:staticStringreadFirstLineFromFile(String path)throwsIOException{try(BufferedReader br =newBufferedReader(newFileReader(path))) {上例中,无论在何种失败情况下,BufferedReader都会自动关闭文件流。你可以通过用逗号分隔的方式,用一个try语句来打开多个资源。多重catch以往Java只允许一个catch代码块对应一个异常,这造成如下的代码冗余:catch(IOException ex) {logger.log(ex);catch(SQLException ex) {从Java 7开始,你可以在一个代码块内捕捉多个异常,从而减少了代码冗余:catch(IOException|SQLException ex) {数值字面常量(Numeric Literals)数值字面常量可以添加下划线是Java语言的新特性。这允许你使用_作为大数字的视觉分隔符。下面的例子不言自明:intthousand =1_000;intmillion =1_000_000;使用Java看到现代Java的语法如何简化并扩展了老Java之后,你可能已经摩拳擦掌跃跃欲试Java了。我整理了一下第三方的工具和库,这些可以用来帮助你们上手。MavenMaven是一个Java构建系统,相比于配置,它更重视规范。Maven定义了应用程序的结构,并提供了许多内置函数,比如运行测试,打包应用,部署你的库。使用Maven会显著降低管理Java项目的认知开销。Maven Central是Java世界中的PyPI,为已发布的Java库提供一站式服务。核心函数谷歌的Guava library提供了谷歌Java开发中所使用的核心函数。这包括应用于集合,缓存,基础数据类型,并发,字符串处理工作,I/O等的常见函数。Guava为如何设计好的的Java API提供了绝佳的案例分析,提供最有效的从Java中推荐的最佳实践的具体例子一个很好的案例,Effective Java中推荐的最佳实践大部分都在Guava中得以体现。Guava被用于谷歌产品开发,进行了超过286,000个单元测试,可谓经受过实战测试的考验。日期/时间函数Joda-Time已经成为Java实际上的标准日期/时间函数库。事实上,Java 8几乎一字不差地采用了Joda-Time规范。自此,我们建议使用java.time中的日期/时间函数代替Joda-Time。但是,如果你需要使用Java 8之前的版本,Joda-Time提供了无与伦比的API。分布式系统Akka提供类似Erlang型的Actor模型的抽象层来编写分布式系统。Akka可以从容应对许多种不同的故障,为编写可靠的分布式系统提供了更高层次的抽象。Web应用程序需要用Java写一个功能完善的Web应用程序?莫怕,有Play Framework罩着你。Play基于Akka的非阻塞I/O,提供了编写Web应用程序的可扩展的异步框架。如果想使用不那么前沿但是被广泛应用于产品的框架,请尝试Jetty。单元测试JUnit仍为编写单元测试的标准。最近几年,JUnit的匹配器有所扩展,允许你对集合作assertions。例如,您可以轻松地断言一个链表是否包含某个特殊值。模拟框架(Mocking Framework)Mockito是Java的标准模拟库。它提供了所有你能想到的且对编写测试非常重要的模拟库的功能。然而不足的是。。。目前为止,我一直在为Java说好话,但是有些方面它还是很烂。它还是Java!Java的历史遗留不可避免,Java仍然向下兼容其最早的版本,这意味着语言和标准库的最烂的部分还存在着。Guava是为了令Java语言更讨人喜欢而产生这个事实就证明了,Java和API存在不一致,令人困惑的问题,有时甚至是完全错误的。JSONJava缺少映射到JSON的object literal syntax(如Python的字典literal syntax)。正因如此,从Java对象映射到JSON有时需要繁复的对象实例化和映射,反之亦然。目前有各种JSON库在这个领域竞争,Jackson是当前的最受欢迎的,但是Jackson的文档需要进一步完善。模拟(Mocking)Mockito解决了测试Java代码中的很多痛点,但是从像Python语言的灵活转换到Java语言的严格,你需要更谨慎地来设计你的类用于模拟。REPL我之所以喜欢Python,其中一点就是它可以迅速地实现读取﹣求值﹣输出循环(read-eval-print loop),从而快速评估新的想法或检验假设。虽然一直有声音说要把读取﹣求值﹣输出循环添加到标准Java库,这一点目前还是不支持的。语法累赘虽然Java编译器的进步意味着明确的类型签名不再那么需要——尤其对于泛型——但是Java仍然比Python冗余的多。启动和运行一个项目需要更多的样板和开销——通常这意味更多的工作。结论Java拥有一个漫长而传奇的历史,其中有好有坏。如果你已经很多年没有使用Java工作了,也许现在是一个好机会再次尝试它。只要不是像下面这样做:
语言特性方面,c#吊打java
PHP是世界上最好的语言
总有人装逼说java太简单,呵呵
哪里提到Python了,标题党黑了纯洁的Python女神。
如此慢速的语言,也能被吹捧。 如果不是安卓,这语言已死
为啥扯我大python,自取其辱?
我还是更喜欢C++那种天马行空的自由范洁
c#被Java的看不起,因为不能在Linux上跑
java我认为是最好的教学用语言,结构清晰,语法严格,但用来实战真不觉得优点有多少,论性能不如c,论开发效率不如php,但是很平衡的语言,或许社会需要的正是这个平衡点吧
java虽然有缺点,但也是是最强大的语言,没有之一
分享硅谷最新动态,包括科技人物,创业公司,热门技术
关注互联网架构及高可用、可扩展及高性能领域的知识传播
开发者的互联网创新加速引擎
技术社区媒体:最新的技术新闻,最快的技术咨询,最有趣的技术人分享交流平台。
专注网络创新技术的先锋媒体和实践平台,涵盖SDN、NFV、CCN、软件定义安全、软件定义数据中心等相关领域,提供新闻资讯、技术交流、在线实验、行业分析、求职招聘、教育培训、方案咨询、创业融资等多元服务。
灯塔大数据自媒体独家发布大数据行业报告、最新译文及撰写文章。
(C) 2016 今日头条 违法和不良信息举报电话:010-公司名称:北京字节跳动科技有限公司新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分5阅读权限10帖子精华可用积分5 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
白手起家, 积分 5, 距离下一级还需 195 积分
帖子主题精华可用积分5 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
论坛徽章:0
& & 我用的是DEBAIN的LINUX,请教如何人查看上边的东西?如题。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID184189空间积分0 积分1008阅读权限10帖子精华可用积分1008 信誉积分100 专家积分0 在线时间15 小时注册时间最后登录
白手起家, 积分 1008, 距离下一级还需 -808 积分
帖子主题精华可用积分1008 信誉积分100 专家积分0 在线时间15 小时注册时间最后登录
论坛徽章:0
Ubuntu是debian的分支,上面有个新立得软件包管理器,不知道debian是不是也有。
总之就是这一类的东西,类似win的添加/删除程序。
UID空间积分0 积分25阅读权限10帖子精华可用积分25 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
白手起家, 积分 25, 距离下一级还需 175 积分
帖子主题精华可用积分25 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
论坛徽章:0
javac -version
java -version
看你java版本
UID空间积分0 积分364阅读权限20帖子精华可用积分364 信誉积分122 专家积分41 在线时间39 小时注册时间最后登录
稍有积蓄, 积分 364, 距离下一级还需 136 积分
帖子主题精华可用积分364 信誉积分122 专家积分41 在线时间39 小时注册时间最后登录
认证徽章论坛徽章:0
echo $JAVA_HOME如果已经安装了JAVA可以查看到位置信息!java -version可以查看JAVA的版本信息!至于安装很简单,下载执行BIN文件同意相关条款以后就会把JAVA包解压到当前目录下,设置JAVA_HOME变量就行了
[ 本帖最后由 tsadmin 于
16:01 编辑 ]
UID9927940空间积分0 积分23阅读权限10帖子精华可用积分23 信誉积分100 专家积分0 在线时间16 小时注册时间最后登录
白手起家, 积分 23, 距离下一级还需 177 积分
帖子主题精华可用积分23 信誉积分100 专家积分0 在线时间16 小时注册时间最后登录
论坛徽章:0
在linux suse redhat看java用rpm -qa | grep java 你的系统没接触过 可以试试
UID空间积分0 积分53阅读权限0帖子精华可用积分53 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
帖子主题精华可用积分53 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
论坛徽章:0
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处为什么java那么垃圾,还是有那么多人用,为什么?
[问题点数:60分,结帖人jzcldy]
为什么java那么垃圾,还是有那么多人用,为什么?
[问题点数:60分,结帖人jzcldy]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年8月 硬件使用大版内专家分月排行榜第二
2010年7月 Windows专区大版内专家分月排行榜第三2009年1月 Windows专区大版内专家分月排行榜第三2008年12月 Windows专区大版内专家分月排行榜第三2006年8月 扩充话题大版内专家分月排行榜第三
2009年12月 VC/MFC大版内专家分月排行榜第一2009年11月 VC/MFC大版内专家分月排行榜第一2009年10月 VC/MFC大版内专家分月排行榜第一2009年9月 VC/MFC大版内专家分月排行榜第一
2009年8月 VC/MFC大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&为什么mc要用java语言_minecraft吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,142,844贴子:
为什么mc要用java语言
用c++不好吗,这样的话低配机也可以玩mc不掉帧了,也可以做更大型的红石电路不卡了。反正和c++差不多,mojang把java改编一个c++版本也不用太久吧
这个项目怎么做吧,求大...
之前在塞班吧发过不过好...
楼主准大一,准备开学前...
该怎么做。。看的一个j...
我找一个多年前java的手...
下载java的时候,显示错...
你认为他们会没想到吗。。
作者爱好,初代是一个人做的
虽然我不懂程序,但是听说用java编游戏比别的简单
一来有现成的游戏编程库可供使用 二来平台比较广(电脑 手机等等) 还有 楼主以为用C编程就可以跑得快了么 这种是最耗资源的 也未必快很多
游戏体积最少扩大十倍。在C++基础上优化改良,作为软件平台的一种编程语言,能节省硬盘资源。
还有镇楼图
呵呵这真的是签名档!我会乱说???
java有内存限制。而且不会影响操作系统。有熊孩子。。。。看你的电脑不爆了。。
表示2009年的中等配置玩MC依然流畅
…………拥有超级跨平台的能力,只要你家电视或者光盘机只要性能足够都能把MC弄上去,只不过操作方式稍微有点蛋疼而已……
。。JAVA手机上玩方便
因为作者当初只是做着玩的,而java编写起来会比较容易
minetest就是用C++写的
恩 我都能玩的电脑 玩MC光影有点卡
跨平台&&Unix是为了取悦而设计的,Mac是为了取悦用户,Windows一门心思想取悦的则是会计
老古董机器表示抗议_(:з」∠)_(凑字数凑回复!?)
最初mc是在浏览器上的,lz用c++写个能在浏览器上玩的试试,不要用现成的游戏引擎
虽然没有横向比较过 不过cpp效率很高?
用java优化差到爆,超级吃配置
C++很烦人懂吗?
1Notch的喜好 2跨平台(方便传教)
就好比为什么LZ是LZ的妈妈生下来的我为什么是我妈妈生下来的一样←_←(^U^)ノ楼上都是纯天然的,有s肉味、小肉味、l肉味、熄肉味、V肉味、m肉味、w肉味、2肉味、1肉味、潮肉味、B肉味、晨肉味、P肉味、路肉味、一肉味、我肉味、潇肉味、4肉味、史肉味、t肉味、h肉味、j肉味、X肉味,各种嘎嘣脆
notch曾说过吧
他12岁左右的时候开始一直看技术书 学习java
14岁左右自己写了一个java游戏 所以相比c++ notch还是喜欢java
况且如果不是java哪来的这么多mod
,那些爱好者怎么弄出cb、mcpc
首先是跨平台,和拓展性。你cpp来一个?(虽然cpp也可以跨平台,但是必须要求玩家自己编译,mc不用)其次是安全性。cpp或c都可以直接访问底层,可以运行在虚拟机()中,可以有效避免因超出内存或挂起而导致计算机死掉最后,是为了偷懒,在编写时可以偷懒的,可以提高编写效率.........不多不多,我水的不多。多乎哉?不多矣。
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 java为什么使用多线程 的文章

 

随机推荐