再现理想 发表于 2015-1-18 11:21:41

JAVA编程:Java开辟中罕见的伤害旌旗灯号(下)仓酷云

前些天,在CSDN上看到了一个消息,说是net网页编程网页编程AJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。DustinMarx是一名专业软件开辟者,从业已有17年的工夫,他具有电子工程学士学位,仍是一名MBA。Dustin保护着一个博客,专门先容软件开辟的各个主题。克日,他撰文谈到了Java开辟中罕见的伤害旌旗灯号,提出了在一样平常的Java开辟中我们必要全力制止的一些不准确的做法。感乐趣的读者能够拜见本系列文章的第一部分落第二部分。
编译器告诫与IDE或工具的告诫、提醒及发明
来自于javac编译器的告诫和IDE和其他代码剖析工具的提醒信息是Java中分明的伤害旌旗灯号。能够这么说,几近每个告诫与提醒信息都是潜伏的伤害旌旗灯号。现实上,我在文中所说起的良多伤害旌旗灯号都是来自于javac编译器或是其他工具与IDE的告诫或提醒信息。这些告诫与提醒信息不但间接对应于良多Java代码的伤害旌旗灯号,并且他们一同呈现时更是标明代码呈现了严峻的成绩,这必要引发开辟者的充足器重。
封闭编译器告诫与IDE和工具的告诫及提醒信息
固然了,我其实不以为FindBugs所标识出的Java代码中的每一个成绩都是Bug或是Defect。现实上,在某些情形下,我乃至会禁用失落某些提醒信息,由于我其实不以为这些提醒信息是准确的,他们会搅散FindBugs的输入。也就是说,假如封闭提醒信息你必要十分审慎才行,确保只疏忽失落那些不准确的提醒信息而保存下主要的告诫信息。相似地,我偏向于开启良多IDE告诫,不外会将个中一小部分封闭失落。我以为在禁用失落javac告诫的情形上去构建Java使用并非明智之举。如许做会埋没失落呈现的伤害旌旗灯号,不外封闭这些告诫信息的举措自己极可能就是个更年夜的伤害旌旗灯号,由于这些告诫与提醒信息会指出良多潜伏的伤害旌旗灯号,必要你重点存眷。
过分工程化与过早优化
过于庞大的软件一般是一种罕见的开辟者平衡举动的了局。为了代码的乖巧而损失可读性,或是存眷于天真性及举行没需要的过早优化而形成可读性的下降经常会招致其他成绩的发生。过分工程化的开辟者经常会这么做,看看可否用点甚么新玩儿意,不外这关于高质量的软件来讲却并没有甚么优点。一旦软件变得过于庞大而且难以了解,那末保护起来就不是那末简单的事变了,并且经常会招致修正时呈现成绩。
举个例子,在浏览代码时你大概想晓得为何开辟者没有接纳加倍间接的体例来完成。一方面,你大概叹息于开辟者可以利用一些加倍初级的特征,但另外一方面,你大概又会以为这么做要比一般情形加倍庞大了。有良多现实能够证实这是一个伤害旌旗灯号,不外我只在几个中央看到有人会这么做。一种情形是将原本用静态Java代码完成好好的浩瀚功效改用反射、Spring或是其他依附注进、静态代办署理、察看者形式等体例来完成。假如用得好的话固然没甚么成绩,不外我常常看到有人过分利用或是滥用这些特征,这间接招致其他开辟者很难了解代码的企图与感化。
将日记动静间接输入到把持台
Java中的日记框架由来已久,现在已无为数很多的日记框架(有些框架构建在其余框架之上),这包含传统的Log4j1.2、Log4j2、java.util.logging(JavaLoggingAPI)、ApacheCommonsLogging及SLF4J等。既然有这么多的日记框架,因而我会很奇异为何良多Java代码中另有System.out与System.err语句。
Java代码中存在着向尺度输入与尺度毛病中举行输入大概有良多缘故原由。个中一个缘故原由就是有些代码还不太成熟,前面还会修正,改成输入到日记,不外到最初也没有改。利用尺度输入与尺度毛病的另外一个坏处就是这些日记动静其实不会被写到日记文件中,而利用日记框架的日记动静则会被写到文件中,如许就会呈现纷歧致的情形。第3个成绩就是日记框架供应了很多优异的特征,假如间接写到尺度输入或是尺度毛病中就没法利用这些特征了。这些特征包含轻松把持日记动静的级别、轻松将捕捉到的非常联系关系到一个日记毛病动静上、轻松将输入重定向到分歧的方针及利用分歧的格局等。固然在间接利用输入与毛病流时这些都能够经由过程手工来完成,不外这必要本人编写代码而不是“开箱即用的”。
除间接利用System.out与System.err外,有些Java代码仍是会将信息写到尺度输入与尺度毛病上(一般也是隐含利用了System.out与System.err)。好比说,Throwable.printStackTrace()(在处置非常经常常会用到)就会这么做,依据Javadoc的申明,它会将非常与仓库信息打印到尺度毛病流中。
利用StringBuffer而非StringBuilder
坦率地说,这只是个小成绩罢了,不外却能标识出过期的Java代码(StringBuffer是JDK1.0引进的,而StringBuilder则是J2SE5引进的)或是开辟者并没有真正了解他们之间的区分。在年夜多半情形下,这二者之间的功能不同关于使用来讲是微不足道的,但因为StringBuilder更合适于年夜多半利用了StringBuffer的场景,因而我们仍是能够从StringBuilder取得功能上的巨大提拔。我很少发明利用StringBuffer而不克不及利用StringBuilder的情形。
办法与机关办法中利用了过量的参数
当办法与机关办法具有太多的参数时,我老是忧虑客户端没法准确地利用他们,出格是有些参数是不异范例的情形。假如一个办法吸收了3个字符串和3个布尔值,那末客户端就很简单弄混传送出来的值。编译器在这类情形下也力所不及,检测成绩的独一举措就是在运转期(经由过程单位测试或是其他测试)检察挪用了局。过量的参数标明了不得当的计划。
过量的显式范例转换

他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。

深爱那片海 发表于 2015-1-20 21:15:52

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

谁可相欹 发表于 2015-1-26 10:31:06

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

蒙在股里 发表于 2015-1-27 05:32:14

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

透明 发表于 2015-1-30 19:43:09

是一种将安全性(Security)列为第一优先考虑的语言

老尸 发表于 2015-1-31 22:33:37

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

柔情似水 发表于 2015-2-2 21:53:46

是一种将安全性(Security)列为第一优先考虑的语言

因胸联盟 发表于 2015-2-8 07:48:50

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

飘灵儿 发表于 2015-2-8 10:45:04

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

海妖 发表于 2015-2-25 09:12:44

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

金色的骷髅 发表于 2015-3-5 14:49:33

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

第二个灵魂 发表于 2015-3-12 08:18:45

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

小妖女 发表于 2015-3-13 03:08:31

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

爱飞 发表于 2015-3-20 10:55:54

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
页: [1]
查看完整版本: JAVA编程:Java开辟中罕见的伤害旌旗灯号(下)仓酷云