萌萌妈妈 发表于 2015-1-18 11:16:16

发布一篇诊断Java代码: 进步Java代码的功能

通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。
良多算法用尾递回办法暗示会显得分外简明。编译器会主动把这类办法转换成轮回,以进步程序的功能。但在Java言语标准中,并没有请求必定要作这类转换,因而,并非一切的Java假造机(JVM)城市做这类转换。这就意味着在Java言语中接纳尾递回办法将招致伟大的内存占用,而这并非我们希冀的了局。EricAllen在本文中论述了静态编译将会坚持言语的语义,而静态编译则一般不会。他申明了为何这是一个主要成绩,并供应了一段代码来匡助判别您的立即(JIT)编译器是不是会在坚持言语语义的同时做尾递回代码转换。
尾递回及其转换
相称多的程序包括有轮回,这些轮回运转的工夫占了程序总运转工夫的很年夜一部分。这些轮回常常要重复更新不止一个变量,而每一个变量的更新又常常依附于别的变量的值。
假如把迭代当作是尾递回函数,那末,就能够把这些变量当作是函数的参数。复杂提示一下:假如一个挪用的前往值被作为挪用函数的值当即前往,那末,这个递回挪用就是尾递回;尾递回不用记着挪用时挪用函数的高低文。
因为这一特性,在尾递回函数和轮回之间有一个很好的对应干系:能够复杂地把每一个递回挪用看做是一个轮回的屡次迭代。但由于一切可变的参数值都一次传给了递回挪用,以是比起轮回来,在尾递回中能够更简单地失掉更新值。并且,难以利用的break语句也经常为函数的复杂前往所替换。
但在Java编程中,用这类体例暗示迭代将招致效力低下,由于大批的递回挪用有招致仓库溢出的伤害。
办理计划对照复杂:由于尾递回函数实践上只是编写轮回的一种更复杂的体例,以是就让编译器把它们主动转换成轮回情势。如许您就同时使用了这两种情势的长处。
可是,只管人人都熟知怎样把一个尾递回函数主动转换成一个复杂轮回,Java标准却不请求做这类转换。不作这类请求的缘故原由也许是:一般在面向对象的言语中,这类转换不克不及静态地举行。相反地,这类从尾递回函数到复杂轮回的转换必需由JIT编译器静态地举行。
要了解为何会是如许,思索上面一个失利的实验:在Integers集上,把Iterator中的元素相乘。
由于上面的程序中有一个毛病,以是在运转时会抛出一个非常。可是,就象在本专栏之前的很多文章中已论证的那样,一个程序抛出的准确非常(跟很棒的毛病范例标识符一样)关于找到毛病躲在程序的甚么中央并没有甚么匡助,我们也不想编译器以这类体例改动程序,以使编译的了局代码抛出一个分歧的非常。
清单1.一个把Integer集的Iterator中的元素相乘的失利实验
importjava.util.Iterator;
publicclassExample{
 publicintproduct(Iteratori){
  returnproductHelp(i,0);
 }
 intproductHelp(Iteratori,intaccumulator){
  if(i.hasNext()){
   returnproductHelp(i,accumulator*((Integer)i.next()).intValue());
  }
  else{
   returnaccumulator;
  }
 }
}
注重product办法中的毛病。product办法经由过程把accumulator赋值为0挪用productHelp。它的值应为1。不然,在类Example的任何实例上挪用product都将发生0值,不论Iterator是甚么值。
假定这个毛病终究被更正了,但同时,类Example的一个子类也被创立了,如清单2所示:
<p>
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。

再见西城 发表于 2015-1-20 19:02:10

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

若相依 发表于 2015-1-26 23:48:07

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

变相怪杰 发表于 2015-1-27 09:10:22

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

乐观 发表于 2015-2-2 21:53:00

是一种为 Internet发展的计算机语言

柔情似水 发表于 2015-2-6 03:11:50

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

莫相离 发表于 2015-2-8 01:36:29

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

金色的骷髅 发表于 2015-2-8 15:30:17

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

只想知道 发表于 2015-2-25 19:40:18

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

仓酷云 发表于 2015-3-8 01:16:35

是一种使用者不需花费很多时间学习的语言

深爱那片海 发表于 2015-3-11 15:25:08

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

因胸联盟 发表于 2015-3-18 22:49:12

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

海妖 发表于 2015-3-26 16:51:04

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
页: [1]
查看完整版本: 发布一篇诊断Java代码: 进步Java代码的功能