分手快乐 发表于 2015-1-18 11:55:45

JAVA网页编程之Good Java Style: Part 2

但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开GoodJavaStyle:Part2
ByThorntonRose

Introduction
Thisistheconclusionofatwo-partseriesonJavacodingstyle.InGoodJavaStyle:Part1

,IintroducedmycaseforwritingJavacodeusinggoodhabits,explainedwhyweshouldcareaboutthewayourcodelooks,andillustratedsomegeneralelementsofgoodJavastyle.Inthispart,Iillustratemoreelementsofgoodstyleandbringmycasetoaconclusion.

SourceFiles
TherearemanywaysthataJavasourcefilecanbeorganized.Hereisonethatworkswell:


Fileheadercomment(optional).
Packagedeclaration.
Blanklineorotherseparator.
Importstatements.
Blanklineorotherseparator.
Class(es).

Example1.BadFileOrganization.


packageorg.rotpad;
importjava.awt.*;
importjavax.swing.event.*;
importorg.javacogs.*;
importjavax.swing.*;
importjava.awt.event.*;
classFoo{
...
}
publicclassRotPadextendsJFrame{
...
}


Example2.GoodFileOrganization.


packageorg.rotpad;

//Javaclasses
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;

//JavaCogsclasses
importorg.javacogs.*;

/**
*RotPadisasimpleGUIapplicationforperformingrotationciphersonplain
*text.
*
*@authorThorntonRose
*@version1.0
*/
publicclassRotPadextendsJFrame{
...
}

//-----------------------------------------------------------------------------

/**
*Foois...
*
*@authorThorntonRose
*@version1.0
*/
classFoo{
...
}


ImportStatements
Acomplexclasscanhavealargenumberofimports,whichcangetunruly,especiallyifyouprefertoimportindividualclassesinsteadofwholepackages(e.g.,java.awt.*).Togetahandleonimports,organizethemasfollows:


Javastandardclasses(java.*).
Javaextensionclasses(javax.*).
Third-partyclasses.
Applicationclasses.

Besuretocommentthethird-partyandapplicationclasses,particularlythosethatdonothaveobviousnames.Useend-of-linecomments,orputacommentatthebeginningofthesection.Also,ifyoureallywanttobeaperfectionist,ordereachgroupofimportsalphabetically.

Example3.BadImportStyle.


importjava.util.*;
importjavax.swing.*;
importjava.awt.event*;
importcom.gensym.com.*;
importjavax.swing.table.*;
importcom.pv.jfcx.*;
importjava.awt.*;
importcom.melthorn.util.*;


Example4a.GoodImportStyle.


importjava.awt.*;
importjava.awt.event*;
importjava.util.*;
importjavax.swing.table.*;
importcom.gensym.com.*;//BeanXporter
importcom.pv.jfcx.*;//ProtoView
importcom.melthorn.util.*;//Utilities

Example4b.GoodImportStyle.



//Javaclasses
importjava.awt.*;
importjava.awt.event*;
importjava.util.*;
importjavax.swing.table.*;

//BeanXporter
importcom.gensym.com.*;

//ProtoViewGUIcomponents
importcom.pv.jfcx.*;

//Applicationclasses
importcom.melthorn.util.*;


Classes
OrganizingaJavasourcefilewithoutorganizingtheclassesinitwouldnotgainyoumuchinthewayofproperstyle.Hereshowtoorganizetheclassesinyoursourcefiles:


Javadoccommentorotherheadercomment.
Classdeclaration.
Fielddeclarations.
Blanklineorotherseparator.
Constructors.
Blanklineorotherseparator.
Methods,exceptmain()

,groupedlogically.
Blanklineorotherseparator.
Innerclasses.
Blanklineorotherseparator.
main()

.

Example5.BadClassStyle.


//RotPad--GUIapp.forROTciphering
publicclassRotPadextendsJFrame{
privatestaticfinalStringTRANSFORM_ROT13="ROT13";
privatestaticfinalStringTRANSFORM_ROT13N5="ROT13N5";
privatestaticfinalStringTRANSFORM_ROTASCII="ROT-ASCII";

privatevoidjbInit()throwsException{
...
}

publicstaticfinalStringTITLE="RotPad";
publicstaticfinalStringVERSION="1.0";

publicstaticvoidmain(String[]args){
...
}

publicRotPad(){
...
}

privateJPaneljPanel1=newJPanel();
privateJPaneljPanel2=newJPanel();
privateBorderLayoutborderLayout1=newBorderLayout();
...
}


Example6.GoodClassStyle.


/**
*RotPadisasimpleGUIapplicationforperformingrotationciphersonplain
*text.
*
*@authorThorntonRose
*@version1.0
*/
publicclassRotPadextendsJFrame{
//Publicconstants

publicstaticfinalStringTITLE="RotPad";
publicstaticfinalStringVERSION="1.0";

//Privateconstants

privatestaticfinalStringTRANSFORM_ROT13="ROT13";
privatestaticfinalStringTRANSFORM_ROT13N5="ROT13N5";
privatestaticfinalStringTRANSFORM_ROTASCII="ROT-ASCII";

//GUIcomponents

privateBorderLayoutborderLayout1=newBorderLayout();
privateJPaneljPanel1=newJPanel();
privateJPaneljPanel2=newJPanel();
...

/**
*Constructanewinstanceofthisclass.
*/
publicRotPad(){
...
}

/**
*InitializeUIcomponents.
*/
privatevoidjbInit()throwsException{
...
}

...

//--------------------------------------------------------------------------

/**
*Starttheapplication.
*/
publicstaticvoidmain(String[]args){
...
}
}


FieldDeclarations
Someclasseshavealargenumberoffields,whichcanbecomedifficulttomaintainiftheyarenotorganizedwell.Organizethemasfollows:


Publiccontstants(finalandstaticfinal).
Publicvariables.
Protectedconstants.
Protectedvariables.
Packageconstants.
Packagevariables.
Privateconstants.
Privatevariables.

Additionally,usethefollowingguidelinesforwritingfielddeclarations:


Useonedeclarationperline.
UseJavadoccommentsonpublicandprotectedfields,atminimum.
UseUPPERCASEforthenamesofconstants.Usinguppercasemakesthemmuchmoreobviousinbothdeclarationsandexpressions.
Ifyouuseatoolthatgeneratesfielddeclarations,suchasJBuilderorVisualCafe,keepthegeneratedfieldsseparatefromtheotherfields.ItmakesmaintenanceoftheUIcodemucheasier.

Example7.BadFieldStyle.


publicclassCustomerSearchDialogextendsJDialog{
privateJLabelfirstNameLabel=newJLabel();
privateJLabellastNameLabel=newJLabel();
publicstaticfinalRESULT_SELECT=1;
privateVectorresults=newVector();//Searchresults.
privateDefaultTableModeltableModel=newDefaultTableModel();
publicstaticfinalRESULT_CANCEL=0;
//...
}


Example8.GoodFieldStyle.


/**
*...
*/
publicclassCustomerSearchDialogextendsJDialog{
/**
*Indicatesthatsearchwascancelled;returnedbyshowDialog()when
*userclickscancelbutton.
*/
publicstaticfinalRESULT_CANCEL=0;

/**
*Indicatesthatacustomerwasselected;returnedbyshowDialog()when
*userclicksselectbutton.
*/
publicstaticfinalRESULT_SELECT=1;

privateVectorresults=newVector();//Searchresults.
privateDefaultTableModeltableModel=newDefaultTableModel();//Gridmodel.

//GUIfields.

privateJLabelfirstNameLabel=newJLabel();
privateJLabellastNameLabel=newJLabel();
//...
}


MethodDeclarations
Usethefollowingguidelinesforwritingmethoddeclarations:


AlwayshaveaJavadoccommentorsomeotherheadercomment.
Alwaysputtheaccessmodifierfirst.
Ifthelineistoolong,breakitintooneormorelines.
Ifthemethodhasmorethanafewparameters,considerputtingeachonaseparateline.
Dontputwhitespacebetweenthemethodnameandtheopeningparenthesis("(").
Alwaysputwhitespace(whichcouldbealinebreak)betweentheclosingparenthesis(")")andtheopeningbrace("{").

Example9.BadMethodStyle.


publicintgetTypeCount(StringcustType)
{
...
}
staticpublicgetInstance(){...};
publicvoidshowRange()
throwsRangeException{
...
}


Example10.GoodMethodStyles.


/**
*Returnthesingleinstanceofthisclass.
*/
publicstaticCalculationEnginegetInstance(){
returninstance;
}

/**
*Calculatetheconsumptioncoefficient.
*/
publicfloatcalculateConsumptionCoefficient(intbase,floatvariance,
intiterations)throwsRangeException{
//...
}

/**
*Calculatetheconsumptioncoefficient.
*/
publicfloatcalculateConsumptionCoefficient(
intbase,
floatvariance,
intiterations)
throwsRangeException
{
//...
}

/**
*Calculatetheconsumptioncoefficient.
*/
publicfloatcalculateConsumptionCoefficient(intbase,
floatvariance,
intiterations)
throwsRangeException
{
//...
}


Conclusion
Inconclusion,Ihaveonefinalthoughtforyouonthesubjectofcodestyle.Nomatterwhatguidelinesyoufollow,andnomatterhowferventyourbeliefsaboutthingslikeindentstyle(cf.,Raymond,"IndentStyle"),rememberthatwhenyouwritecodeyouroverallgoalshouldbetomakethecodeunderstandableandmaintainablebysomeoneelse.

RelatedLinks

IndentStyle,TheJargonFile,EricS.Raymond.
Tabsvs.Spaces,JamieZawinski.
WritingRobustJavaCode―TheAmbysoftInc.CodingStandardsforJava,ScottAmbler.
DraftJavaCodingStandard,DougLea.
JavaCodeConventions,SunMicrosystems,Inc.
HowtoWriteDocCommentsforJavadoc,SunMicrosystems,Inc.
TheJargonFile(knowninprintasTheNewHackersDictionary),EricS.Raymond.

AbouttheAuthor
ThorntonRoseisacontractsoftwaredeveloperinAtlanta,Ga.Hecanbereachedviae-mailatthornton.rose@mindspring.com.



java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),

飘飘悠悠 发表于 2015-1-21 17:15:53

是一种使网页(Web Page)产生生动活泼画面的语言

透明 发表于 2015-1-26 06:47:39

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

因胸联盟 发表于 2015-1-27 13:59:47

是一种突破用户端机器环境和CPU

兰色精灵 发表于 2015-2-3 19:29:26

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

再见西城 发表于 2015-2-6 00:37:37

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

灵魂腐蚀 发表于 2015-2-8 21:27:42

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

变相怪杰 发表于 2015-2-26 11:00:01

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

再现理想 发表于 2015-3-7 14:40:57

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

小妖女 发表于 2015-3-13 09:10:14

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

简单生活 发表于 2015-3-20 18:11:15

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

精灵巫婆 发表于 2015-3-27 08:08:07

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

乐观 发表于 2015-4-2 18:40:58

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

仓酷云 发表于 2015-4-4 17:31:41

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

柔情似水 发表于 2015-4-11 02:11:14

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

第二个灵魂 发表于 2015-4-12 04:43:55

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

爱飞 发表于 2015-4-25 01:29:32

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

冷月葬花魂 发表于 2015-4-27 04:59:49

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

愤怒的大鸟 发表于 2015-4-27 13:44:16

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

山那边是海 发表于 2015-7-10 15:45:03

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
页: [1]
查看完整版本: JAVA网页编程之Good Java Style: Part 2