If you can't read please download the document
Upload
ngothu
View
222
Download
0
Embed Size (px)
Citation preview
1/25/10 1:40 PMJava Coding Standard - Confluence
Page 1 of 40https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable
Labels:
JPL Java Coding Standard
Java Coding StandardAdded by Klaus Havelund, last edited by Klaus Havelund on Jan 25, 2010 (view change)
ADD LABELS
JPL Institutional Coding Standardfor the Java Programming Language
Jet Propulsion Laboratory
(c) 2009 California Institute of Technology. Government sponsorship acknowledged.
The research described in this document was carried out at the Jet Propulsion Laboratory, California Institute of Technology,under a contract with the National Aeronautics and Space Administration.
Version: 1.1Date: January 25, 2010
Table of Contentsintroduction
process
R01 compile with checks turned onR02 apply static analysisR03 document public elementsR04 write unit tests
names
R05 use the standard naming conventionsR06 do not override field or class names
packages, classes and interfaces
R07 make imports explicitR08 do not have cyclic package and class dependenciesR09 obey the contract for equals()R10 define both equals() and hashCode()R11 define equals when adding fieldsR12 define equals with parameter type Object
https://jplwiki.jpl.nasa.gov:8443/display/javastdhttps://jplwiki.jpl.nasa.gov:8443/pages/diffpages.action?pageId=23762457&originalId=35457699https://jplwiki.jpl.nasa.gov:8443/display/~khavelunhttps://jplwiki.jpl.nasa.gov:8443/display/~khavelunhttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-introductionhttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-processhttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-compilewithchecksturnedonhttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-applystaticanalysishttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-documentpublicelementshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-writeunittestshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-nameshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-usethestandardnamingconventionshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotoverridefieldorclassnameshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-packages%2Cclassesandinterfaceshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-makeimportsexplicithttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donothavecyclicpackageandclassdependencieshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-obeythecontractforequals%28%29https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-definebothequals%28%29andhashCode%28%29https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-defineequalswhenaddingfieldshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-defineequalswithparametertypeObject
1/25/10 1:40 PMJava Coding Standard - Confluence
Page 2 of 40https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable
R13 do not use finalizersR14 do not implement the Cloneable interfaceR15 do not call nonfinal methods in constructorsR16 select composition over inheritance
fields
R17 make fields privateR18 do not use static mutable fieldsR19 declare immutable fields finalR20 initialize fields before use
methods
R21 use assertionsR22 use annotationsR23 restrict method overloadingR24 do not assign to parametersR25 do not return null arrays or collectionsR26 do not call System.exit
declarations and statements
R27 have one concept per lineR28 use braces in control structuresR29 do not have empty blocksR30 use breaks in switch statementsR31 end switch statements with defaultR32 terminate if-else-if with else
expressions
R33 restrict side effects in expressionsR34 use named constants for non-trivial literalsR35 make operator precedence explicitR36 do not use reference equalityR37 use only short-circuit logic operatorsR38 do not use octal valuesR39 do not use floating point equalityR40 use one result type in conditional expressionsR41 do not use string concatenation operator in loops
exceptions
R42 do not drop exceptionsR43 do not abruptly exit a finally block
types
R44 use genericsR45 use interfaces as types when availableR46 use primitive typesR47 do not remove literals from collectionsR48 restrict numeric conversions
concurrency
R49 program against data racesR50 program against deadlocksR51 do not rely on the scheduler for synchronizationR52 wait and notify safely
complexity
R53 reduce code complexity
references
https://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotusefinalizershttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotimplementtheCloneableinterfacehttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotcallnonfinalmethodsinconstructorshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-selectcompositionoverinheritancehttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-fieldshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-makefieldsprivatehttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotusestaticmutablefieldshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-declareimmutablefieldsfinalhttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-initializefieldsbeforeusehttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-methodshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-useassertionshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-useannotationshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-restrictmethodoverloadinghttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotassigntoparametershttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotreturnnullarraysorcollectionshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donotcallSystem.exithttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-declarationsandstatementshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-haveoneconceptperlinehttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-usebracesincontrolstructureshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-donothaveemptyblockshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&decorator=printable#JavaCodingStandard-usebreaksinswitchstatementshttps://jplwiki.jpl.nasa.gov:8443/pages/viewpage.action?spaceKey=javastd&title=Java+Coding+Standard&am