zoukankan      html  css  js  c++  java
  • java 代码规范

    java 代码规范

    参考

    源文件组织结构

    • 源文件必须按顺序由以下部分组成:
      • 许可证(License)或版权声明(Copyright)
      • package语句
        • package语句占据单独一行不换行,允许超出120字符列宽限制。
      • import语句
        • 非static imports,禁止使用通配符import。
        • 所有未使用的import语句应该被删除。
      • 唯一的顶层类
        • 每个源文件只允许包含唯一一个顶层类。
        • 重载的方法必须放在一起,即同名的构造函数或方法之间禁止插入其他成员。
      • 每两部分之间用一个空行分隔,不允许多个空行。

    代码格式

    • 每行只写一条语句, 每条语句之后都要换行。
    • 在类的不同的成员间增加空行,包括:成员变量、构造函数、方法、内部类、静态初始化块、实例初始化块等.
    • 两个成员变量声明之间可以不加空行。空行通常用于对成员变量进行逻辑分组。
    • 方法体内,按需增加空行,以便从逻辑上对语句进行分组
    • 除行首缩进、注释和字符串内的空格以外,禁止使用连续的空格
    • 类型与中括号紧挨相连来 表示 数组。用String[] args的方式来声明数组,而非String args[]。
    • 添加在类、方法、构造函数、成员属性上的注解(Annotation)直接写在注释块之后,每个注解独占一行。
    • 当同时使用多个修饰符时,按照下列顺序:
      • public protected private abstract static final transient volatile synchronized native strictfp
    • 长整型数字必须使用大写字母L结尾,不能使用小写字母l,以便和数字1进行区分。例如使用3000000000L而不是3000000000l

    命名

    • 通常有多种方式将短语组织成驼峰方式,像一些缩写词:IPv6、iOS等。为了统一,必须遵循以下几点规则。
      • 将字符全部转换为ASCII字符,并且去掉’等符号。例如,Müller's algorithm被转换为Muellers algorithm
      • 在空格和标点符号处对上一步的结果进行切分,组成一个词组。

    编程实践

    • 关于基本数据类型与包装数据类型的使用标准如下:
      • 所有的 POJO 类(普通定义的类)属性必须使用包装数据类型。
      • RPC 方法的返回值和参数必须使用包装数据类型。
      • 所有的局部变量使用基本数据类型。
    • 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
    • 所有的覆写方法,必须加@Override 注解。
    • 相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。
    • 不能使用过时的类或方法。
    • Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
    • 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
    • 定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。
    • 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。
    • POJO 类必须写 toString 方法。
    • 禁止覆盖(Override)Object.finalize方法。
    • 关于 hashCode 和 equals 的处理,只要重写 equals,就必须重写 hashCode。
    • ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassCastException 异常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。在 subList 场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、 增加、删除产生 ConcurrentModificationException 异常。
    • 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
    • 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
    • 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/** 内容 **/格式,不得使用 // xxx 方式。
    • 异常不要用来做流程控制,条件控制。
    • catch 时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。 对于非稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。
    • 捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请 将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。
    • 有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回 滚事务。
    • finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。 说明:如果 JDK7 及以上,可以使用 try-with-resources 方式。
    • 不要在 finally 块中使用 return。
    • 捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。
  • 相关阅读:
    前天晚上终于可以骑自行车了
    第一篇cnblog!
    使用web服务查询数据库的例子(上)
    使用网络提供的web服务开发航班查询程序
    使用web服务查询数据库的例子(下)
    .NET技术与企业级解决方案研究应用
    用正则表达式解析url
    基于原型的类继承
    Pub/Sub模式
    函数调用apply
  • 原文地址:https://www.cnblogs.com/longjiang-uestc/p/12546928.html
Copyright © 2011-2022 走看看