1. Java编码规范
    1. 为什么要有编码规范?
      1. 便于维护
      2. 便于交流
      3. 统一风格、美观
      4. 良好的习惯
      5. 改善程序可读性
    2. Java文件组织
      1. 开头注释
      2. 包声明
      3. 导入声明
      4. 类和接口声明
        1. 类或接口文档注释
        2. 类或接口声明
        3. 类或接口实现注释
        4. 静态变量
          1. public
          2. protected
          3. default
          4. private
        5. 实例变量
          1. public
          2. protected
          3. default
          4. private
        6. 构造函数
        7. 方法:按功能分组排列,不要按作用域
    3. 缩进
      1. 4个空格缩进
      2. 行长度限制(120个?)
      3. 换行策略
        1. 在一个逗号后面断开
        2. 在一个操作符前面断开
        3. 缩进8个空格
    4. 注释
      1. 文档注释
        1. Javadoc注释
      2. 实现注释
        1. 多行注释
        2. 单行注释(2种)
    5. 声明
      1. 变量
        1. 一行声明一个变量
        2. 声明时初始化变量,除非有其他不能初始化的原因
        3. 避免同名变量的覆盖问题
      2. 类、接口、方法
        1. 左大括号 "{" 位于声明语句同行的末尾
        2. 右大括号 "}" 另起一行,与相应的声明语句对齐,除非是一个空语句, "}" 应紧跟在 "{" 之后
      3. 方法
        1. 声明间以一空白行分隔
        2. 方法名和其参数列表前的“(”之间不要有空格
    6. 语句
      1. 每行一条语句
      2. 复合语句
        1. 左大括号 "{" 应位于复合语句起始行的行尾;
        2. 右大括号 "}" 应另起一行并与复合语句首行对齐
      3. if、while、for语句总是用 "{" 和 "}" 括起来
      4. 当switch中的case没有break时,要进行注释
    7. 空白符
      1. 空行
        1. 源文件中两个类或接口之间
        2. 两个方法之间
        3. 一个方法内的两个逻辑段之间,用以提高可读性
      2. 空白
        1. 空白应该位于参数列表中逗号的后面
        2. 基本所有的二元运算符,应该使用空格将之与操作数分开
        3. if的条件、for语句中的表达式应该被空格分开
        4. 强制转换后应该跟一个空格
    8. 命名规范(便于理解和记忆的词)
        1. 全部小写
        2. java.lang
        1. 名词
        2. 单词的首字母大写
        3. 后面单词首字母大写
        4. BufferedInputStream
      1. 接口
        1. 同“类”
        2. Collection
      2. 方法
        1. 动词
        2. 单词首字母小写
        3. 后面单词首字母大写
        4. add
      3. 变量
        1. 单词首字母小写
        2. 后面单词首字母大写
        3. myWidth
      4. 常量
        1. 全部大写,单词间用下划线隔开
        2. MIN_WIDTH
    9. 惯例
      1. 尽量缩小变量、方法、类的作用域
      2. 避免用一个对象访问一个类的静态变量和方法,用类名替代
      3. 除-1、0、1外,不要有Magic Number
      4. 避免在一个语句中给多个变量赋相同的值,也即避免复杂的语句
      5. 运算符优先级不明时,一定要加括号
      6. XXX、TODO、FIXME的使用
    10. 实例
  2. 代码格式化
    1. 作用:深化Java的编码规范,达到代码风格统一
    2. Eclipse中的Java Formatter
      1. Indentation
        1. 缩进相关
        2. Tab Policy(Space Only,4个缩进)
      2. Braces
        1. 括号放在哪里(同一行)
      3. White Space
        1. 空格出现在哪里
      4. Blank Lines
        1. 空行出现在哪里
      5. New Lines
        1. 什么情况下产生新行
      6. Control Statements
        1. 控制语句的格式定义
      7. Line Wrapping
        1. 控制折行格式
      8. Comments
        1. 控制注释
  3. Checkstyle
    1. 作用:保证Java的编码规范被正确实施
    2. Eclipse集成Checkstyle插件
      1. Javadoc Comments
        1. Javadoc相关
        2. 配置
          1. Package Html
          2. 是否每个包中存在package.html
          3. Method Javadoc
          4. 方法的javadoc
          5. Style Javadoc
          6. javadoc的格式验证
          7. Type Javadoc
          8. 类或接口的javadoc
          9. Variable Javadoc
          10. 变量的javadoc
      2. Naming Conventions
        1. 命名惯例
        2. 配置
          1. Abstract Class Name
          2. 抽象类命名
          3. Constants Name
          4. 常量名
          5. Local Final Variable Name
          6. 本地final变量名
          7. Local Variable Name
          8. 本地变量名
          9. Member Name
          10. 成员变量名
          11. Method Name
          12. 方法名
          13. Package Name
          14. 包名
          15. Parameter Name
          16. 参数名
          17. Static Variable Name
          18. 静态变量名
          19. Type Name
          20. 类或接口名
      3. Headers
        1. 文件头检查
        2. 配置
          1. Header
          2. 检查java源文件头
          3. Regular Expression Header
          4. 利用正则表达式检查java源文件头
          5. Cross Langurag Regexp Header
          6. 利用正则表达式检查任何源文件头
      4. Imports
        1. 导入检查
        2. 配置
          1. Avoid Star Imports
          2. 避免*导入
          3. Illegal Imports
          4. 避免导入一些不合理的包,如sun.*,非100%纯java
          5. Import Order Check
          6. 保证导入顺序
          7. Redundant Imports
          8. 多余的导入
          9. Unused Imports
          10. 未使用的导入
          11. Import Control
          12. 控制包能导入什么
      5. Size Violations
        1. 检查大小
        2. 配置
          1. Anonymous inner class lengths
          2. 匿名内部类的长度
          3. Executable Statement Size
          4. 限制可执行代码片段的长度
          5. Maximum File Length
          6. 最大文件长度
          7. Maximum Line Length
          8. 最大行长度
          9. Maximum Method Length
          10. 最大方法长度
          11. Maximum Parameter Length
          12. 最大参数长度
      6. Whitespace
        1. 空白相关
        2. 配置
          1. Empty For Initializer Pad
          2. 在初始化处是否需要空白,如:for的初始化处
          3. Empty For Iterator Pad
          4. 在迭代处是否需要空白,如:for的迭代处
          5. No Whitespace After
          6. 在某些符号后面没有空白
          7. No Whitespace Before
          8. 在某些符号前面没有空白
          9. Operator Wrap
          10. 当折行时,哪些操作符必须在新起一行
          11. Method Parameter Pad
          12. 方法名和左括号中间是否有空白
          13. Paren Pad
          14. 是否有空白在左括号和右括号之间
          15. Tab Character
          16. 是否在源代码中有\t
          17. Typecase Paren Pad
          18. 强制类型转换后面是否有空格
          19. Whitespace After
          20. 检查分隔符后是否有空白,如:逗号后面有空格
          21. Whitespace Around
          22. 检查分隔符周围是否有空白,如:等号前后有空格
      7. Modifiers
        1. 修饰符相关
        2. 配置
          1. Modifier Order
          2. 修饰符顺序
          3. Redundant Modifier
          4. 多余修饰符
      8. Blocks
        1. 代码块
        2. 配置
          1. Avoid Nested Blocks
          2. 避免嵌套块
          3. Empty Block
          4. 空块
          5. Left Curly Brace Placement
          6. 左括号的位置
          7. Need Braces
          8. 某些控制结构必须有括号
          9. Right Curly Brace Placement
          10. 右括号的位置
      9. Coding Problems
        1. 代码常见问题
        2. 配置
          1. Avoid Inline Conditionals
          2. 避免内联条件
          3. Covariant Equals
          4. 检查定义的equals方法确实覆盖了Object的equals
          5. Default Comes Last
          6. default在switch的最后
          7. Declaration Order Check
          8. 检查定义顺序
          9. Double Check Locking
          10. 双检查锁
          11. Empty Statement
          12. 空语句
          13. Equals and HashCode
          14. 覆盖了equals也会覆盖hashCode
          15. Explicit Initialization
          16. 明确初始化每一个变量
          17. Fall Through
          18. switch中的case在没有break或return等情况下,必须有注释
          19. Final Local Variable
          20. 本地变量,如果值未改变,则定义成final
          21. Hidden Field
          22. 变量间不存在隐藏
          23. Illegal Instantiation
          24. 检查不合理的实例化,此处实例化可以用工厂方法代替
          25. Illegal Catch
          26. 不合理的异常捕获
          27. Illegal Throws
          28. 不合理的异常抛出
          29. Illegal Tokens
          30. 检查非法的分隔符
          31. Illegal Tokens Text
          32. 检查非法的分隔符的下个字符
          33. Illegal Type
          34. 某些类应当从不用于定义类型、参数等
          35. Inner Assignment
          36. 检查子表达式中是否有赋值操作
          37. JUnit Test Case
          38. junit的测试命名正确
          39. Magic Number
          40. 无魔数
          41. Missing Constructor
          42. 缺少构造函数
          43. Missing Switch Default
          44. switch缺少default语句
          45. Modified Control Variable
          46. 更改了控制变量
          47. Multiple String Literals
          48. 检查在一个文件中相同字符串出现多次
          49. Multiple Variable Declaration
          50. 每个变量定义在单独一行
          51. Nested If Depth
          52. 检查if的嵌套层次深度
          53. Nested Try Depth
          54. 检查try的嵌套层次深度
          55. Package Declaration
          56. 保证每个类都有一个包定义
          57. Parameter Assignment
          58. 不允许对参数进行赋值
          59. Redundant Throws
          60. 多余的异常抛出
          61. Require This
          62. 引用本类的变量、方法时需要this
          63. Return Count
          64. 限制return的数量
          65. Simplify Boolean Expression
          66. 保证boolean表达式简单
          67. Simplify Boolean Return
          68. 保证boolean返回值表达式简单
          69. String Literal Equality
          70. String的判等不使用==或!=
          71. SuperClone
          72. 子类的clone中调用了super.clone()
          73. SuperFinalize
          74. 子类的finalize调用了super.finalize()
          75. Trailing Array Comma
          76. 数组初始化包括尾逗号
          77. Unnecessary Parentheses
          78. 不必要的括号
      10. Class Design
        1. 类设计
        2. 配置
          1. Design For Extension
          2. 检查类是否为扩展设计
          3. Final Class
          4. 仅有private构造函数的类应定义为final类
          5. Hide Utility Class Constructor
          6. 工具类不定义public构造函数
          7. Interface Is Type
          8. 接口是类型,不能只定义常量,必须定义方法
          9. Mutable Exception
          10. 保证异常类的所有成员是final的,是不可变类
          11. Throws Count
          12. 限制抛出异常的数量
          13. Visiblity Modifier
          14. 检查类成员的可见性
      11. Duplicates
        1. 重复
        2. 配置
          1. Strict Duplicate Code
          2. 重复检测
      12. Metrics
        1. 代码质量度量
        2. 配置
          1. Cyclomatic Complexity
          2. 圈复杂度
          3. Non Commenting Soruce Statements
          4. 非注释源代码行数
          5. Boolean Expression Complexity
          6. 限制布尔操作符的数量
          7. Class Data Abstraction Coupling
          8. 其他的类在某一个类中实例的数量
          9. Class Fan Out Complexity
          10. 一个类依赖其他类的数量
          11. NPath Complexity
          12. 一个函数的可执行路径数
      13. Miscellaneous
        1. 杂项
        2. 配置
          1. Array Type Style
          2. 数组样式
          3. C-Style:String args[]
          4. Java-Style:String[] args
          5. Descendent Token Check
          6. Final Parameter
          7. 方法和构造函数的参数是final的
          8. Generic Illegal Regexp
          9. 通过正则表达式检查一些代码问题
          10. Indentation
          11. 检查缩进
          12. New Line At End Of File
          13. 文件以一新行结束
          14. Required Regular Expression
          15. 在代码中存在符合正则的代码
          16. TODO Comments
          17. 检查TODO
          18. Translation
          19. 检查属性文件是否缺少key
          20. Trailing Comment
          21. 每个注释仅仅占一行
          22. Uncommented Main
          23. 检查未注释无用的main方法
          24. Upper Ell
          25. Long被使用L而不是l来定义
          26. Regexp
          27. 符合正则表达式,并且在代码中出现一定次数
      14. J2EE
        1. 主要是相关于EJB的一些检查
      15. Other
        1. Checker
          1. checkstyle配置的根,不能移除
        2. TreeWalker
          1. 按照定义的属性检查java源文件
      16. Filters
        1. Severity Match Filter
          1. 根据event的严重性来决定audit events
        2. Supression Filter
          1. 根据supression xml document,当check error时,压制audit events
        3. Supression Comment Filter
          1. 使用某些注释格式来压制audit events
    3. Checkstyle与Maven集成,并在CI时进行验证
      1. pom.xml
      2. mvn checkstyle:check