仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2643|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页编程之Good Java Style: Part 2

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:55:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是一些大型开发或者是保密型比较高的项目都会用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[JBuildergenerated]

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

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

/**
*InitializeUIcomponents.[JBuildergenerated]
*/
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.[JBuilder]

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
兰色精灵 该用户已被删除
5#
发表于 2015-2-3 19:29:26 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
再见西城 该用户已被删除
6#
发表于 2015-2-6 00:37:37 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
灵魂腐蚀 该用户已被删除
7#
发表于 2015-2-8 21:27:42 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
变相怪杰 该用户已被删除
8#
发表于 2015-2-26 11:00:01 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再现理想 该用户已被删除
9#
发表于 2015-3-7 14:40:57 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
小妖女 该用户已被删除
10#
发表于 2015-3-13 09:10:14 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
简单生活 该用户已被删除
11#
发表于 2015-3-20 18:11:15 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
精灵巫婆 该用户已被删除
12#
发表于 2015-3-27 08:08:07 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
乐观 该用户已被删除
13#
发表于 2015-4-2 18:40:58 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
14#
发表于 2015-4-4 17:31:41 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
柔情似水 该用户已被删除
15#
发表于 2015-4-11 02:11:14 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
第二个灵魂 该用户已被删除
16#
发表于 2015-4-12 04:43:55 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
爱飞 该用户已被删除
17#
发表于 2015-4-25 01:29:32 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
冷月葬花魂 该用户已被删除
18#
发表于 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而写的。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-4-27 13:44:16 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
山那边是海 该用户已被删除
20#
发表于 2015-7-10 15:45:03 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表