Java Coding Standard - Confluence - · PDF fileJava Coding Standard - Confluence 1/25/10 1:40 PM ... Comments can be checked with the

  • 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