Java编程规范-文件组织与排版

2022-12-01 08:17:27 浏览数 (3)

文件组织 1文件名

Java源文件以其顶层的类名来命名,区分大小写,文件扩展名为 " .java " 。

2源文件结构

源文件应该按如下顺序布局 ( 如果有该部分内容 ) : 1、文件头注释;不强制要求按照此规范处理 2、package 语句; 3、import 语句; 4、类或接口声明 / 实现;

3一个文件只定义一个类

为方便程序的阅读与代码的维护,一个源文件中只定义一个类,内部类不受此限制。

排版 Java 代码总的排版风格要求是代码清晰易读,便于 Review 和维护。 1缩进

不强制按照此规范改造 代码块要采用缩进风格编写, 缩进采用 4 个空格 , 不允许使用 Tab 缩进 。 在函数体的开始、类和接口的定义、以及 if、else、for、do、while、switch、case、try、catch、finally等语句中的代码或者static、synchronized等代码块中都要采用上述缩进方式。 示例: 【正确用法】

代码语言:javascript复制
if (a > b) { 
    doSomething(); 
} 

2大括号

不强制按照此规范改造 1、左大括号前不换行,括号后换行; 2、右大括号前换行,与引用他们的语句对齐; 3、如果右大括号是一个语句、函数体或类的终止,则在右大括号后换行,否则不换行; 4、如果大括号中没有语句,且右大括号后也没有语句时,则右大括号前不换行,与左大括号处于同一行; 示例: 【正确用法】

代码语言:javascript复制
if (a > b) { 
    doSomething(); 
} 
  
if (a > b) { 
    doSomething(); 
} else { 
    doSomething(); 
} 
void doNothing() {} 

3换行

不强制按照此规范改造 1、一行代码的长度不应该超出 120 个字节,超长的代码应该换行; 2、如果换行,应该遵循如下原则: 在逗号 ‘,’ 后换行; 在较低优先级操作符前换行,操作符位于新行之首; 采用适当缩进保证代码清晰易读; 方法调用的点符号与下文一起换行; 在括号前不要换行; 示例: 【正确用法】

代码语言:javascript复制
/* 不足 120 字节时,不换行 */ 
someMethod(l o ng Expression1, long Expression2, long Expression3); 
  
/* 超过 120 字节时,需要换行,换行后要使代码清晰易读 */ 
someMethod(l o ng Expression1, 
            l o ng Expression2, 
            l o ng Expression3, 
            l o ng Expression4, 
            l o ng Expression5); 
  
/* 不足 120 字节时,不换行 */ 
longName1 = longName2   longName3   longName4; 
  
/* 超过 120 字节时,需要换行,换行后要使代码清晰易读 */ 
longName1 = longName2 
            (longName3   longName4 – longName5) 
            (4   longName6); 
  
StringBuilder strBuilder = new StringBuilder(); 
strBuilder.append("userName=").append(userName) 
           .append("&address=").append(address); 

4空行

不强制按照此规范改造 下列 情况应该使用空行以使代码结构清晰,提高代码可读性: 1、4.2 章节 列举的源文件结构块之间; 2、类属性和类方法之间; 3、两个方法之间; 4、方法内的局部变量和第一条语句之间; 5、方法内的逻辑段之间; 6、注释之前 ( 文件头注释除外 ) ; 示例: 【正确用法】

代码语言:javascript复制
package com.dtdrea m .client; 
  
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashMap; 
  
public class UserInfo { 
    private String usrName; 
    private String usrAddr; 
  
    public userInfo(String usrName, String usrAddr) { 
        this.usrName = usrName; 
        this.usrAddr = usrAddr; 
    } 
    ... 
} 

5空格

不强制按照此规范改造 下列位置应该使用空格以使代码结构清晰,提高代码可读性: 1、左大括号前; 2、如果右大括号后面有语句,右大括号与后面语句之间; 3、关键字 (if 、 for 、 while 、 switch 、 catch 等 ) 和左括号 ‘(’ 之间; 4、二元操作符前后都需要有空格, ‘.’ 除外; 5、参数列表中的逗号 ‘,’ 后面; 6、for 循环中的表达式之间,分号 ‘;’ 后面; 7、foreach 循环中冒号 ‘:’ 前后; 8、方法名 ( 包括声明和调用 ) 和左括号 ‘(’ 之间 不需要 空格; 9、小括号与内部字符之间 不需要 空格; 10、没有必要 增加若干空格来使某一行的字符与上一行对应位置的字符对齐。 11、多行注释中,换行后星号 ‘’ 之前至少放置一个空格,为实现与首行注释的星号 '’ 对齐; 12、注释星号 ‘*’ 与注释内容 如果处于同一行,两者 之间放置一个空格; 13、注释的双斜线与注释内容之间有且仅有一个空格; 示例: 【错误用法】

代码语言:javascript复制
/ / 小括号 与内部字符间不需要空格 
if ( a == b ) 
  
//  没有 必要追求多行 对齐 
int              a = 3; 
long             b = 4L; 
StringBuilder sb = new StringBuilder(); 

【正确用法】

代码语言:javascript复制
for (int i = 0; i < 10; i  ) { 
    a  = i; 
} 
  
for (String usrName : usrList) { 
    usrAge = usrInfoClass.getUsrAge(usrName); 
    usrInfoClass.showUser(usrName, usrAge); 
} 
  
int a = 3; 
long b = 4L; 
StringBuffer sb = new StringBuffer(); 

6声明 建议按照此规范处理 1、每行最多声明一个变量; 示例: 【错误用法】

代码语言:javascript复制
int a, b; 

【正确用法】

代码语言:javascript复制
int a = 0; 
int b = 0; 

2、定 义数组时,方括号 " [] " 是类型的一部分,所以方括号 " [] " 应放在数据类型后,不要放在变量名后; 示例: 【错误用法】

代码语言:javascript复制
byte rcvBuf [] = new byte[MAX_RECV_BUF_SIZE]; 

【正确用法】

代码语言:javascript复制
byte [] rcvBuf = new byte[MAX_RECV_BUF_SIZE]; 

3、如果有多个修饰符,修饰符按照如下顺序排列:

代码语言:javascript复制
public protected private abstract static final transient volatile synchronized native strictfp 

示例: 【 错误用法】

代码语言:javascript复制
public final static int MAX_USER_CNT = 1024; 

【正确用法】

代码语言:javascript复制
public static final int MAX_USER_CNT = 1024; 

7类成员排列顺序

不强制按照此规范改造 类成员不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置,推荐按照如下顺序排列:

代码语言:javascript复制
类定义 { 
静态成员变量 / Static Fields 
静态初始化块 / Static Initializers 
成员变量 / Fields 
初始化块 / Initializers 
构造器 / Constructors 
静态成员方法 / Static Methods 
成员方法 / Methods 
重载自Object的方法如toString(), hashCode() 和main方法 
类型(内部类) / Types(Inner Classes) 
同等的类型,按public, protected, private的顺序排列。 
} 

0 人点赞