从接触java以来,我们一直学习着各种技术和架构。但我们常忽略代码可读性和一些特殊的规范和约定。有很多人尤其是新人写的代码,运行可能没什么问题。但却不忍直视,甚至内涵风险。
业内代码规范可能各有各的理解,这里介绍一下国内的大佬,也是大部分初入职场的同学都会看到阿里Java开发手册。这里只列一些个人觉得较重要的,还是建议搭建看一下完整版。
编程规范
命名规范
- 禁止使用拼音和英文混合
这里还是建议大家使用英文命名,纯拼音也不要用,有助于理解和规范,不会可以百度翻译嘛 - 类名使用驼峰,特殊模型相关可以忽略
正例:UserService / UserDAO / RemotingAdapter
反例:Userservice / UserDao / TCPUDPDeal
这里需要注意像TCP/UDP/XML等这种英文缩写建议也使用驼峰而非全大写 - 方法名、参数名、变量都统一采用驼峰写法,首字母小写
- 常量命名全大写,单次间使用下划线
如:MAX_CONNECTION_COUNT - 抽象类命名,以Abstract或Base开头;异常类以Exception结尾;测试类以Test结尾。
- boolean类型变量,不要以is开头,避免部分序列化框架出错。
正例:boolean exists
反例:boolean isExists - 包名统一小写,使用点分割,尽可能点之间都是一个自然语义的英文单次。报名统一使用单数形式。
如:com.alibaba.open.util - 如果使用设计模式,在类名中体现,有利于阅读者理解
如:OrderFactory / LoginProxy / ResourceObserver - 类接口中属性和方法不要加任何修饰符
注:JDK8中接口允许默认实现,有default - 对于Service和DAO类,一定是接口,实现需要以Impl的后缀结尾。区别于接口
如:CacheService CacheServiceImpl - 枚举类名加上Enum后缀,成员名称全部大写,下划线分割
枚举就是特殊常量类,所以命名按常量方式;类命名加Enum后缀,如果使用枚举是为了实现单例模式,可以不加Enum后缀
常量定义
- 不允许出现魔法值,即:未经定义的常量
如:String key = “id=” + id; - long和Long初始赋值时,必须使用大写,为了避免和数字1搞混。
正例:Long a = 2L
反例:Long a = 2l - 不要使用一个常量类维护所有的常量,尽可能根据功能进行拆分归类,分开维护