Java代码编写规范总结

一、命名规范

1.包名的命名
包名全部小写,连续的单词直接连接,不出现特殊符号,不使用下划线,包名中不要出现很容易区分供应商的信息
参考示例:
一级包名为com
二级包名为tesla
三级包名为应用名称:如launcher、weather等
四级包名为模块名或层级名:如工具类为util、Activity类为activity
例如:com.tesla.launcher.activity

2.类的命名
采用大驼峰式命名法,每个单词的首字母大写。尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。例外注意命令时,区分各个组件类型。
参考示例:MainMenuActivity、SoftwareUpdateService等

3.方法(函数)命名
使用动词或动名词,采用小驼峰命名法。
参考示例:onCreate();

4.接口命名
命名规则与类一样采用命名规则与类一样采用大驼峰命名法,多以able或ible结尾
参考示例:Runnable

5.变量命名
A.成员变量和临时变量命名:采用小驼峰命名法,第一个单词首字母小写其它单词首字母大写。
参考示例:private String userName;
B.常量命名:常量使用全大写字母加下划线的方式命名,并且用final static修饰。
参考示例:private final static String TAG = “tag”;
C.控件实例命名:采用小写字母加下划线方式命名,类中控件名称必须与xml布局id保持一致。
参考示例:android:id=”@+id/tv_pic_brightness_value”则对应调用的Activity中定义该控件为 private TextView tv_pic_brightness_value;

6.控件资源id命名
view缩写_模块名_view的逻辑名称。参考示例:tv_pic_brightness_value 常见View控件及其缩写如下:
在这里插入图片描述
在这里插入图片描述
7.res资源文件命名
A.布局文件命名规范:全部采用小写,采用下划线命名法。其中{module_name}为业务模块或功能模块等模块化的名称或简称。
activity layout:{module_name}activity{名称} 例如:
channel_activity_programedit.xml

fragment layout:{module_name}fragment{名称} 例如:
weather_fragment_cityset.xml

dialog layout:{module_name}dialog{名称} 例如:
channel_dialog_rename.xml

list layout:{module_name}list{名称} 例如:
channel_list_programeedit.xml

adapter layout:{module_name}item{名称} 例如:
channel_item_programedit.xml

widget layout:{module_name}widget{名称} 例如:
weather_widget_todayinfo.xml

B.图片文件命名规范
背景图片:{module_name}_名称_bg.png
图标:{module_name}_名称_icon.png

C.字符串和字符串数组命名规范
字符串:str_{module_name}名称
字符串数组:strarr
{module_name}名称
其它资源如color、dimens等类似如上命名方式:
如color
{module_name}_名称

二、代码编写风格

2.1方法和类的长度

为便于阅读和理解,单个函数的有效代码长度当尽量控制在 100 行以内(不包括注释行),当一个功能模块过大时往往造成阅读困难,因此当使用子函数等将相应功能抽取出来,这也有利于提高代码的重用度。
单个类也不宜过大,当出现此类情况时当将相应功能的代码重构到其他类中,通过组合等方式来调用,建议单个类的长度包括注释行不超过 1500 行。尽量避免使用大类和长方法。

2.2间隔问题

类、方法及功能块间等应以空行相隔,以增加可读性,但不得有无规则的大片空行。
操作符两端应当各空一个字符以增加可读性。相应独立的功能模块之间可使用注释行间隔,并标明相应内容。

2.3代码对齐问题

在这里插入图片描述

2.4 控制语句

判断中如有常量,则应将常量置与判断式的右侧。如:

if ( true == isAdmin())...
if ( null == user)...

尽量不使用三目条件判断。
所有 if 语句必须用{}包括起来,即便是只有一句:在这里插入图片描述

2.5 循环调节

循环中必须有终止循环的条件或语句,避免死循环。当在 for 语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。若需要,可以在 for 循环之前(为初始化子句)或 for 循环末尾(为更新子句)使用单独的语句。因为循环条件在每次循环中多会执行一次,故尽量避免在其中调用耗时或费资源的操作,比较一下两种循环的差异:

在这里插入图片描述

2.6 异常的捕捉和处理

捕捉异常是为了处理它,不要捕捉了却什么都不处理而抛弃,最低限度当向控制台输出当前异常,如果你不想处理它,请将该异常抛给它的调用者,建议对每个捕捉到的异常都调用
printStackTrace()输出异常信息,避免因异常的湮没。多个异常应分别捕捉并处理,避免使用一个单一的 catch 来处理。如:
在这里插入图片描述

2.7 其他一些优化建议

2.7.1 成员变量权限

良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没必要公有 (public),就定义为保护 (protected);没必要保护(protected),就定义为私有 (private)
1、 空格问题

if (true == hasMoney) {

} else {

} 

如上if else运算符两端需要用空格隔开。

2、使用括号明确表示运算符的优先级,避免使用默认优先级。例如:
if((a > b) && (c>d)) 不要写成 if(a > b && c > d)

3、不要出现无意义的字符或数字,如果需要使用数字,需要将其按照具体的功能定义为常量。

4、数组声明的时候采用int[] languageIndex;而不要采用int languageIndex[];

5、准确地确定成员函数的存取控制符号,不是必须使用public属性的,请使用protected,不是必须使用protected,请使用private。

6、if语句中判断语句的书写规范
变量和常量比较应该书写为“常量 == 变量”,主要是为了防止“ == ”
误写为“ = ”。

2.7.2 性能提升建议

2.7.2.1 String 与 StringBugffer

不要使用如下 String 初始化方法:

String str = new String(“abcdef”);
这将产生两个对象,应当直接赋值:
String str = “abcdef”;

在处理可变 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用 StringBuffer 对象和她的append() 方法。如果我们用 String 对象代替 StringBuffer 对象的话,将会花费许多不必要的创建和释放对象的 CPU 时间。

2.7.2.2垃圾收集和资源释放

参考三个以上判断时,switch case效率高于if else:
https://blog.csdn.net/MDZZOL/article/details/78790125
https://blog.csdn.net/csdn_aiyang/article/details/76619098

过多的if else 分句请将其转成 switch 语句或使用子函数。 switch case 的效率更高

2.7.2.3垃圾收集和资源释放

不要过分依赖 JVM 的垃圾收集机制,因为你无法预测和知道 JVM 在什么时候运行 GC。尽可能早的释放资源,不再使用的资源请立即释放。可能有异常的操作时必须在 try 的 finally 块中释放资源,如数据库连接、IO 操作等:
在这里插入图片描述

三、注释说明

3.1文件注释内容

版权说明、描述信息、生成日期、修改记录、作者、生成日期,格式如下:
/**

  • Copyright © 2015ktc. All rights reserved.
  • @Title: LogcatUtil.java
  • @Description: 调试信息工具文件
  • @author: shan.zhang
  • @date: 2015-6-4
  • @modifier:
  • @version: V1.0
    */

3.2类和接口的注释

类功能描述、作者、生成日期
/**

  • @ClassName: LogcatUtil
  • @Description: 用于程序中调试信息输出的工具类
  • @author: shan.zhang
  • @date: 2015-6-4
    */

3.3方法注释

功能描述、输入参数、返回值
/**
*

  • @Title: getInstance
  • @Description: 调试工具类实例获取方法
  • @return: LogcatUtil
    */
    public static LogcatUtil getInstance() {
    if(null == mLogcatUtil) {
    mLogcatUtil = new LogcatUtil();
    }
    return mLogcatUtil;
    }

3.4成员变量、常量注释

对应的功能定义
/**

  • 是否输出打印信息开关
  • true:输出打印信息
  • false:不输出打印信息
    /
    private final static boolean DEBUG_ENABLE = false;
    /
    *
  • 默认输出log信息的Tag标识
    */
    private final static String DEBUG_TAG = “k_debug”;
  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值