标准的Java编码规范手册

article/2025/10/14 17:04:04

       编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题。今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助。

编码规范的意义
       在项目开发维护中,编码规范作为开发规范的一个组成部分,是十分重要和必须的,它不仅仅是为了提高开发效率,也有利于降低后期维护开发的成本。编码规范的根本目的就是要让不仅代码可以一目了然,也可以很容易的理解开发人员所编写的代码程的用途和意义。由此,用来减少项目中因为开发维护人员的更替或由于长时间不维护造成的记忆模糊或混乱等情况带来的对代码所实现的真正功能的理解困难和歧义。另外也提高了代码复查效率和效果。

规范实施建议
       不是为了规范而规范,以提高软件开发质量和效率为目标,辅以IDE等开发工具为保障,逐步改进编码规范化水平
       对于格式规范、注释规范等部分规范的要求,可以通过使用eclipse/AndroidStudio自带的Format方法(快捷键:Ctrl+Shift+F)进行自动格式化,可以提高开发效率又符合编码规范。
       编码规范文档本身需要定期不断的修正和完善,以符合实际开发规范的要求。

格式规范

a)缩进
使用配置文件进行格式化:
配置文件中一个TAB等于4个空格。

b)行长度
每行100字符
注: 使用eclipse自带的Format方法(快捷键:Ctrl+Shift+F)时,需要配置“Maximum line width”设置长度为100

c)声明

d)声明变量、常量
一行只声明一个变量或常量;
在代码块的开始处声明实例变量,不要在首次用到该变量时才声明【推荐】

e)声明类
左大括号”{“位于声明语句同行的末尾,右大括号”}”另起一行;
方法与方法之间以空行分隔

f)语句
可以使用eclipse自带的Format方法(快捷键:Ctrl+Shift+F)时 使用eclipse默认的“Control Statements ”格式化方法进行
注:if语句总是用”{“和”}”括起来
示例

class Example {void bar() {do {} while (true);try {} catch (Exception e) {} finally {}}void foo2() {if (true) {return;}if (true) {return;} else if (false) {return;} else {return;}}
}

g)空格的使用

等号左右必须各有一个空格:
button = null;
双目运算符左右必须各有一个空格:
imageWidth = imagePadding + imageSize;
标点符号后面必须跟一个空格
标点符号包括“,”、“;”等,下面列出几个例子。
一行定义多个变量时,“,”后跟空格:
int i, j;
在for循环中,“;”后跟空格:
for (int i = 0; i < count; ++i)
在有多个入口参数的函数调用中,“,”后跟一个空格:
addContentView(view, params);

h)变量类型的使用
编程的过程中尽量使用接口编程,而少用类编程。
如:

    List<String> names = new ArrayList<String>();

命名规范

通用规则
       命名规范使程序更易读,从而更易于理解。它们也可以提供一些有关标识符功能的信息,以助于理解代码,例如,不论它是一个常量,包,还是类。

       包(Packages) 一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(login names)。
如:

package com.itotem.view
package com.itotem.utils.xxxx

       类(Classes) 命名规则:类名是个一名词,采用大小写混合的方式,每个单词的首字母大写。尽量使类名简洁而富于描述。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML)
如:

public class Button
public class EditText

       接口(Interfaces) 命名规则:接口类名以大写“I”开头,大小写规则与类名相似,
如:

public interface IProjGroupService

       方法(Methods) 方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。
如:

public void onCreate(Bundle savedInstanceState)
public void run()

       局部变量(Local Variables) 采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型。c,d,e,它们一般用于字符型,变量名不应以下划线或美元符号开头。
如:

int i = 0;
float imageWidth = 0;

       实例变量(Instance Variables) 大小写规则和类名相似,除了前面需要一个m。
如:

    private int mEmployeeId = 0;private String mName = "";

       若实例变量为public类型的则和局部变量采用相同的命名规则。
如:

    public int width = 0;public String contactName = "";

       常量(Constants [采用stiatc final 修饰]) 类常量的声明,应该全部大写,单词间用下划线隔开。(类似C语言的宏定义)。
如:

    private static final int MIN_WIDTH = 4; private static final int MAX_WIDTH = 999; 

       资源id 资源id全部采用小写,单词之间用下划线隔开。

       注意:这个小写规范是Android强制执行的,如果出现大写或者特殊字符工程是不能编译的。会报错
如:

    downloadapp_namecall_log_type

备注(Remark)
       所有的标识符名称要求取有意义的单词,不能使用myXXXX和button01等风格的名称。

附加说明
1、从命名中可以直观看懂其定义和用途,否则必须增加注释说明;
2、在同一系统内命名必须保持统一;避免出现类似示例中的情况;
示例:项目组id 变量定义:pgid、projectgroupId、idprojectgroup、idProjGroup
3、避免名字过长、命名采用英文缩写,避免使用汉语拼音【推荐】

组织规范

       引入包规范
       不允许引入类中未使用的包;
       引入包时不能直接引入“.*”,必须明确到引入的类名
       可以通过快捷键引入包。Ctrl+Shift+O;

注释规范

a)通用注释规则

b)说明
       注释要精简并清晰容易理解;
       保持注释与代码同步。
       代码质量不好但能正常运行,或者还没有实现的代码用 //TODO:任务 ;
       存在错误隐患的代码用 //FIXME:声明;
       对于不建议使用(废弃)的类或者方法,必须在他们的注释中增加 @deprecated

c)javadoc注释标签语法定义说明
       @author 对类的说明 标明开发该类模块的作者
       @version 对类的说明 标明该类模块的版本
       @see 对类、属性、方法的说明 参考转向,也就是相关主题
       @param 对方法的说明 对方法中某参数的说明
       @return 对方法的说明 对方法返回值的说明
       @exception 对方法的说明 对方法可能抛出的异常进行说
       @deprecated 对类或方法的说明 该类或方法不建议使用

d)类的注释
目的:简单概述该类作用

范围:所有java类,可以不包括javabean

书写规范:类的注释必须写在该类的声明语法之前。在注释中要描述该类的描述,创建者,创建日期。

类注释模板:可以通过eclipse配置(Code Templates 中的 Code 的New Java files)

${filecomment}
${package_declaration}/*** Title: ${project_name}<br>* Description: <br>* Copyright: Copyright (c) ${year}    <br>* Create DateTime: ${date} ${time} <br>
* @author perry.li*/
${typecomment}
${type_declaration}

类注释示例:

package cn.sh.sstic.projectmanagement.projectfeasibleschemaeval;
/*** Title: mwbas2008<br>* Description: 可行性方案套数数组定义类<br>* Create DateTime: Oct 6, 2008 4:41:03 PM <br>
* @author perry.li*/
public class FormUtil {

e)方法的注释

       目的:简要概述该方法的功能,包括其参数、返回值意义的注释

       范围:java类中的各种方法
       注:接口的实现方法的注释应写在接口中而不是实现代码中;
       对自动生成的get/set方法不需要添加注释;
       如果方法允许null作为参数,或者允许返回值为null,必须在JavaDoc中说明,如果没有说明,方法的调用者不允许使用null作为参数,并认为返回值是null 安全的。

       书写规范:方法注释必须写在方法定义之前。该注释包括:方法其功能的简单 描述,方法的参数、返回值类型、返回值意义简单的描述。

       模板:对于已定义好的接口的方法,可以直接输入 /**回车 eclipse可自动生成注释模板

示例:

    /*** 演示方法注释* @param args* @return*  返回 null 表示没有找到* @throws Exception*/private String[] demoFunction(String args) throws Exception{return null;}

f)失效代码块的注释
       目的:对一块暂时不启用的代码进行注释。
       注:这里并不是指垃圾、无用的代码,只是暂时不启用或暂时不明确的代码

       书写规范:失效代码块采用块注释方法行注释方法进行标注。
       注:采用注释块在 使用eclipse自带的Format方法(快捷键:Ctrl+Shift+F)时需要配置,去掉选中 “Enable block commnet formatting”

示例:

    // if (1==1) {//          // } else {////      }

或者

    /*      if (1 == 1) {// 如果1与1相等的时候String code1;} else {// 如果1与1不相等的时候String code2;}*/

g)分支语句的注释
目的:简单描述该分支条件的意义

书写规范:在分支语句代码的下一行进行注释

示例:

        if (1==1) {//如果1与1相等的时候code} else {//如果1与1不相等的时候code}

h)变量、常量的注释
       目的:简单描述该变量、常量的意义。
       书写规范:变量、常量注释必须写在变量、常量定义之前或同一行中,简单描述其代表的意义。
       注:对自循环所用的变量(i,j,k,)可以不需要注释。
示例:

String commitFlag; //提交标志
i)@Override的使用
所有的重写方法,在方法开始加上 @Override 关键字。

如:

@Override
public void onCreate(Bundle savedInstanceState) {
}

异常处理规范

       重新抛出的异常必须保留原来的异常,即throw new NewException(“message”, e); 而不能写成throw new NewException(“message”),更不能不继续往上层抛出异常。
       针对重要的可捕获的业务相关异常,需创建异常处理类,在方法中捕获到异常后,反馈到用户界面上,提示用户【推荐】

补充规范

       代码在提交版本控制之前,请确保已清除不必要的log调试语句
       明确的垃圾或无用代码必须删除

安卓开发高级技术交流QQ群:108721298 欢迎入群

微信公众号:mobilesafehome

(本公众号支持投票)

Android安全技术大本营


http://chatgpt.dhexx.cn/article/pqcNtA17.shtml

相关文章

Java编码规范总结(参考腾讯编码规范)

一、java文件组织 文件组织规则&#xff1a;由于超过2000行的程序难以阅读&#xff0c;应该尽量避免出现超过2000行的程序。一个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联&#xff0c;可以将它们和公共类放入同一个源文件。公共类必须是这个…

编码体系与规范

编码体系与规范 网页编码是指网页中字符的编码方式。目前国内常见的网页字符编码主要有utf-8、gbk、gb2312&#xff0c;其中 utf-8为国际化编码&#xff0c;在各国各地区的网站中都很常见&#xff0c;可以说是最通用的字符编码。此外&#xff0c;有些日本网页会使用EUC-JP、SH…

python编码规范

PE8基本规范&#xff1a; 建议修改在使用的 IDE 中修改 PEP8 的每行字数不超79字符规范&#xff0c;可修改为 Django 建议的 119 字符 一、python编码规范&#xff1a; (一)代码编码&#xff1a; 1、国际惯例&#xff0c;文件编码和 Python 编码格式全部为 utf-8 &#xff0c;…

JAVA编码规范

命名风格 代码命名不能以下划线或者美元符号开头或者结尾代码命名不能以中文拼音或者中文拼音与英文混合方式类名使用UpperCamCamelCase风格&#xff0c;但DO、PO、DTO、VO、BO等除外方法名、参数名、变量名统一使用lowerCamelCase&#xff0c;必须遵守驼峰命名常量名全部大写…

【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity精品学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作分享 &…

编码的一些基本规范

1. 数据库表设计 Rule 1. 【强制】表名小写&#xff0c;多个word之间用英文下横线_分隔Rule 2. 【强制】表名普通表前缀t_;临时表tmp_;备份表bak_;视图v_;主键pk_;外键fk_;唯一索引uix_;普通索引idx_Rule 3. 【强制】关系表统一用relation结尾Rule 4. 【强制】表名和业务字段必…

编码规范汇总【持续更新】

目录 前言规范标准C规范C#规范 规范记录命名硬编码单例类【线程安全】Qt定义类【隐式内存共享】 前言 作为软件工程师&#xff0c;出产物就应该具备工程的健壮性和美观性。因此代码规范是作为软件工程师的职业素养。但总所周知&#xff0c;程序员的工作基本就是在维护一座屎山…

51单片机串口波特率

SCON SCON 0X50工作方式1 波特率需要使用定时器1 波特率 ((2^SMOD)/32) * (定时器溢出率) 定时器溢出率 系统时钟/指令周期/装载数 SMOD 1 &#xff0c;波特率加倍 TH1 TL1 -(FOSC / INSTRU_CYCLE / 32 / BAUD); //Set auto-reload vaule TR1 1;

关于51单片机串口1发送完整的数据包

关于51单片机串口1发送完整的数据包 在参考这样的协议的条件下我们想发送一套完整的数据包该如何发送呢&#xff1f;可以设计这样的程序。 1. 串行口1接收特定包头数据包函数。 参数: Uart_Rec_Data&#xff1a;串口接收到的数据 &#xff1b; USER_Get_DataPacket: 数据存储目…

51单片机串口收发

#include<reg52.h>#define uint unsigned int #define uchar unsigned char/*本代码实现串口的收发功能&#xff0c;PC发送什么单片机就接收什么&#xff0c; 然后单片机又把接收的发出去&#xff0c;本次编写了在发送单个字符串 函数上添加了字符串函数&#xff0c;方便…

学习51单片机串口工作方式及应用

1.串口控制寄存器SCON SM2:多机通信控制位 REN:允许接收控制位 TB8:发送第九位数据 RB8:接收第九位数据 TI:发送中断标志位 RI:接收中断标志位 2.电源控制寄存器PCON 当SMOD位为1&#xff0c;则串行口方式1、方式2、方式3的波特率加倍。 3.串口的工作方式 &#xff08;1…

关于51单片机串口通信的相关知识(寄存器)

一、51单片机串口概念 1、51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口&#xff0c;具有UART&#xff08;通用异步收发器&#xff09;的全部功能。 2、51单片机的硬件连接 简单双向串口通信有两根数据通信线&#xff1a; 发送端TXD&#xff08;Transmit Da…

C51单片机串口点亮一个led

C51单片机串口点亮一个led 因为最近要用到51的串口做一些通信&#xff0c;这里写一个点led的程序记录一下。 说是一个led&#xff0c;其实可以随意多个。 主要使用到的东西&#xff1a; STC89C52芯片&#xff0c;USB转TTL下载器&#xff0c;led灯若干&#xff0c;面包板&am…

51单片机 串口

串口说白了&#xff0c;就是初始化后&#xff0c;用中断接收发送字符而已。 TXD 是 80C51 单片机的P3.1口&#xff0c;RXD 是80C51 单片机的 P3.0口 T1 溢出率 是定时器1的溢出率 &#xff0c;SMOD是发送速率倍频的16分频&#xff0c;T1每溢出一次发送一位&#xff0c;每次发送…

【记录】一次51单片机串口乱码问题排查

【记录】一次51单片机串口乱码问题排查 项目场景问题描述原因分析解决方案结语 项目场景 在51串口收发仿真实验中使用两个单片机互相通信&#xff0c;程序设定A上电1s后通过串口以16进制给B发送AA,直到B收到AA后回复BB&#xff0c;当A机确认收到AA后开始发送数据&#xff0c;若…

## 51单片机串口通讯

1&#xff0c;接线方式&#xff1a; RXD: 数据输入引脚&#xff1b;对应stc89的P3.0口&#xff1b; TXD&#xff1a;数据的发送端口;对应P3.1口&#xff1b; 注意&#xff1a;单片机的的串口TX&#xff0c;RX与外设交叉接线&#xff1b; 2串口编程要素 输出/输入数据缓冲器S…

51单片机串口通信详解

文章目录 前言一、计算机通信简介二、串口通信简介1、简介2、同步通信和异步通信2.1 同步通信2.2 异步通信 3、串行通信的传输方式4、串口通信硬件电路5、常见接口介绍 三、串口相关寄存器详解1、特殊功能寄存器SCON2、PCON寄存器3、TMOD寄存器&#xff08;定时器工作方式寄存器…

51单片机串口接收处理

目的: 通过51单片机串口外设功能&#xff0c;来对一组数据进行处理&#xff0c;新手刚刚入门可能会将串口接收到的一个数据直接赋值给一个变量&#xff0c;然后用这个变量做相应功能&#xff0c;可是这样写的不稳定性太高了&#xff0c;有可能会接收不到你要的那个数据&#…

51单片机串口通信原理

计算机串行通信基础 通信有串行通信和并行通信两种方式 串行通信&#xff1a; 将数据字节分为一位一位的形式在一条数据线上逐个传送。如下图所示 串行通信特点&#xff1a;传输线少&#xff0c;长距离传送时成本低&#xff0c;且可以利用电话网等现成设备&#xff0c;但数据的…

51单片机串口点灯

#include "reg52.h" #include "intrins.h" sfr AUXR 0x8e; sbit D5 P3^7; //定义led 接在P3.7void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //配置串口工作方式1&#xff0c;RE使能接收数据 0101 0000PCON 0x00; TMOD &0x0F;TMOD |0x2…