谁可相欹 发表于 2015-1-18 11:21:41

JAVA网站制作之Java开辟中罕见的伤害旌旗灯号(上)仓酷云

但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,DustinMarx是一名专业软件开辟者,从业已有17年的工夫,他具有电子工程学士学位,仍是一名MBA。Dustin保护着一个博客,专门先容软件开辟的各个主题。克日,他撰文谈到了Java开辟中罕见的伤害旌旗灯号,提出了在一样平常的Java开辟中我们必要全力制止的一些不准确的做法。
经由多年的开辟、浏览、回忆并保护了数万行的Java代码后,我常常会看到Java代码中呈现的某些“伤害旌旗灯号”,这些旌旗灯号常常(但大概其实不老是)表示着代码呈现了某些成绩。我这里所要谈的并非那些老是毛病的理论,而是想要谈谈在某些场景下多是得当,但一般却会招致成绩的一些理论。这些“伤害旌旗灯号”偶然大概并没有成绩,但却会形成成绩的堆集,并终极招致成绩的发生。这里我总结出了一些“伤害旌旗灯号”,而且谈谈在哪些情形下他们是没有成绩的,在哪些情形下则会招致成绩。
这里将要谈及的良多“伤害旌旗灯号”一般城市收到来自于FindBugs等代码剖析工具所收回的告诫信息,盛行的JavaIDE也会将它们标志出来。不外,我发明有很多开辟者会疏忽失落这些来自于工具与IDE的告诫信息,要末是由于他们关失落了提醒信息,要末是出于本身的开辟习气或是不睬解与这些告诫信息所联系关系的风险,因而会疏忽失落告诫信息。
对援用利用==(而不是.equals)
良多Java开辟者都晓得利用==对照原生范例数据,利用.equals对照援用范例数据。这是一条很简单记着的复杂准绳,Java开辟者这么用也没甚么成绩。偶然利用==来对照尺度的Java范例援用(String、Integer、Long等等)也没成绩,不外这要取决于被缓存的值的巨细,因而这么做并非一个好的做法。偶然,我们必要反省标识的相称性而不是内容的相称性,在这类情形下利用==来对照援用就很合适了。绝对而言,我更喜好Groovy的处置体例,==相似于.equals,而===则是加倍严厉地对照标识。同理,利用!=来对照两个援用也是一个“伤害旌旗灯号”,由于假如待对照的两个对象不共享不异的标识(内存地点),即使他们具有不异的内容也老是会前往true。
对列举利用.equals(而不是==)
坦白地说,关于列举,Java开辟者利用==仍是.equals都没有太年夜干系。不外,我更偏向于对列举利用==。这么做最主要的缘故原由就是对列举利用==能够避免不当心将列举与不相干的对象举行对照(永久不会相称)。Object.equals(Object)办法能够吸收恣意对象,这意味着编译器其实不会强迫限制传出去的对象要与被对照的对象是不异的范例。一样平常来讲,我更喜好静态的编译期成绩检测而非静态运转期的成绩检测,对列举利用==能够满意这个请求。同理,在对照列举时,!=与!.equals也是一样的。
魔数与字符串字面值
我常常会在Java代码中看到有人利用“魔数”和字符串字面值。他们关于将来的保护来讲是一种“伤害旌旗灯号”,让我非常嫌疑使用的准确性。在单个地位处将其标识为常量(假如大概用列举来暗示更佳),这么做能够改良将来的保护,而且让我能够加倍自傲地信任利用这些值的一切代码都在利用着不异的值。除此以外,在一个中央界说好常量与列举能够更便利地利用IDE的“查找利用”特征来找到一切利用这些常量的中央。
字符串常量
在看到无限的相干字符串常量时,我就在想利用列举应当加倍合适。关于高度内聚的字符串常量的情形来讲更是云云,由于列举能够更好地表达出这些字符串所暗示的观点。比拟于字符串常量来讲,列举供应了编译期的静态范例平安与潜伏的功能上风。关于程序的准确性来讲,编译期的平安是最吸引我的中央。
利用Java的“goto”
很少有人会利用标签代码,假如利用了那也申明用法不妥。换句话说,假如利用了也是滥用罢了。在年夜多半情形下,利用Java的“goto”会形成代码的可读性极差。
依据感化域来断定得当的变量援用
我以为这类体例永久都是不得当的,但它却能运转,乃至偶然是被某些Java开辟者成心而为之。好比说,Java开辟者将传送进办法的变量在办法实行时指向了另外一个援用。该变量(一时指向办法参数)指向了另外一个援用,直到办法停止为止,这时候它离开了感化域。在这类情形下,在办法署名的参数界说前加上final关头字会招致编译器毛病,这也是我喜好在办法参数前加上final的缘故原由之一。关于我来讲,在办法中声明一个新的部分变量是加倍明晰且可读的体例,由于它只能在办法中利用。更加主要的是,作为代码的读者,我不晓得是开辟者成心但愿该参数名只是指向一个分歧的值仍是引进了Bug,由于将参数从头指向新的援用实践上会改动挪用真个值。假如我看到有人这么写,那末我就会找代码的编写者或是经由过程单位测试来考证代码的企图。
equals(Object)与hashCode()办法的不婚配

你通过从书的数量和开发周期及运行速度来证明:net网页编程和ruby要比java简单。

谁可相欹 发表于 2015-1-20 21:15:52

http://www.ckuyun.com/去下载,或到同济技术论坛的服务器ftp://www.ckuyun.com去下,安装上有什么问题,可以到论坛上去提问。

活着的死人 发表于 2015-1-24 12:17:27

Java是一种计算机编程语言,拥有跨平台、面向对java

山那边是海 发表于 2015-1-29 07:14:23

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

柔情似水 发表于 2015-1-31 15:31:19

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

因胸联盟 发表于 2015-2-2 13:03:21

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

冷月葬花魂 发表于 2015-2-7 20:22:54

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

再现理想 发表于 2015-2-23 09:52:03

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

透明 发表于 2015-3-3 11:37:41

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

愤怒的大鸟 发表于 2015-3-9 11:58:43

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

爱飞 发表于 2015-3-10 12:28:11

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

分手快乐 发表于 2015-3-13 02:07:13

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

蒙在股里 发表于 2015-3-13 04:29:01

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

兰色精灵 发表于 2015-3-20 12:45:27

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
页: [1]
查看完整版本: JAVA网站制作之Java开辟中罕见的伤害旌旗灯号(上)仓酷云