1.源代码格式规范
1.1 Java文件样式
1.1.1版权信息
版权信息必须在 java 文件的开头,比如:
/**
* description: 类说明(通用文件不用)
*Created by xujerry on 17/7/21.
* modify:
* 修改日期,修改内容,修改人(每次代码提交进行一次迭代)
* 修改日期,修改内容,修改人
*/
1.1.2包(Package)/Imports
package的名字,其后是import列表。
为了使Package的命名和java包的规范一致,采用目录命名规范。
建议在每一个包目录中,写一个package.html文件,描述该包的主要用途和结构。
1.1.3 import不要使用通配符
即,不要出现类似这样的import语句:import java.util.*;
1.1.4 import顺序和间距
import语句可分为以下几组,按照这个顺序,每组由一个空行分隔:
所有的静态导入独立成组
com.google imports(仅当这个源文件是在com.google包下)
第三方的包。每个顶级包为一组,字典序。例如:android, com, junit, org, sun
java imports5.javax imports组内不空行.
1.2 分类命名规范
1.2.1 包的名称
Java包的名字都是由小写单词组成。
例如: net.frontfree.javagroup
1.2.2 类的名称
类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,或者已对象的名称为类名。
例如:CarBean
1.2.3 方法的命名
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头
例如: sendMessge
1.2.4 常量的命名
常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
例如: MAX_VALUE
1.2.5 基本数据类型命名规范
Integer:int+描述 Char:chr+描述 Boolean:bln+描述
Long:lng+描述 Short:shr +描述 Double:dbl+描述
String:str+描述 Float:flt+描述 Single:sng+描述
DataTime:dt+描述 Array:arr+描述 Object:obj+描述
例如:String srtName;
1.2.6 控件命名规范
TextView :tv_+描述
Button :btn_+描述
ImageButton :ib_+描述
ImageView :img_+描述
CheckBox :chk_+描述
RadioButton :rb_+描述
AnalogClock :ac_+描述
DigitalClock :dc_+描述
DatePicker :dp_+描述
TimePicker :tp _+描述
ToggleButton :tb_+描述
EditText:edit_+描述
ProgressBar:pb_+描述
SeekBar:sb _+描述
AutoCompleteTextView:autotxt_+描述
MultiAutoCompleteTextView:mlautotxt_+描述
ZoomControls:zc_+描述
Include:ind_+描述
VideoView:vv_+描述
WebView:wv_+描述
RatingBar:ratbr_+描述
Tab:tab__+描述
Spinner:spin_+描述
Chronometer:chro_+描述
ScrollView:sv_+描述
TextSwitcher:tswi_+描述
Gallery:gal_+描述
ImageSwitcher:imgswi_+描述
GridView:gv_+描述
ListView:lv_+描述
ExpandableList: exl_+描述
MapView: mv_+描述
1.3.变量命名规范
变量命名:前缀+类型描述+意义描述
前缀:
成员变量:m_*** 局部变量:l_*** 形参:a_***
注意:加了前缀的名称,第二位要变成大写
如:mTv_name,iBln_male
1.4、项目结构包名命名规范
包名
此包中包含
com.xx.应用名称缩写.ui
再分2个包
1、页面用到的Activity类 (activitie层级名用户界面层)
2、Fragment类(片段)
com.xx.应用名称缩写.base
基础共享的类
com.xx.应用名称缩写.adapter
页面用到的Adapter类 (适配器的类)
com.xx.应用名称缩写.util
此包中包含:公共工具方法类(util模块名)
com.xx.应用名称缩写.bean
下面可分:vo、po、dto 此包中包含:JavaBean类
com.xx.应用名称缩写.mvp
此包中包含:模型类model,逻辑类presenter,显示类view。
com.xx.应用名称缩写.db
数据库操作类
com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget )
自定义的View类等
com.xx.应用名称缩写.service
Service服务
com.xx.应用名称缩写.receiver
BroadcastReceiver服务
1.5、项目按功能进行类名命名规范
类
描述
例如
Activity 类
Activity为后缀标识
欢迎页面类WelcomeActivity
Adapter类
Adapter 为后缀标识
新闻详情适配器 NewDetailAdapter
解析类
Parser为后缀标识
首页解析类HomePosterParser
工具方法类
Util或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Util
线程池管理类:ThreadPoolManager
日志工具类:LogUtil(Logger也可)
打印工具类:PrinterUtil
数据库类
以DBHelper后缀标识
新闻数据库:NewDBHelper
Service类
以Service为后缀标识
时间服务TimeServiceBroadcast
Receiver类
以Receiver为后缀标识
推送接收JPushReceiver
ContentProvider
以Provider为后缀标识
自定义的共享基础类
以Base开头
BaseActivity,BaseFragment
1.6 资源文件命名规范
1.6.1. 资源布局文件(XML文件(layout布局文件)):
全部小写,采用下划线命名法
1) contentview 命名
必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
例如:activity_main.xml
2) Dialog命名:dialog_描述.xml
例如:dialog_hint.xml
3) PopupWindow命名:ppw_描述.xml
例如:ppw_info.xml
4) 列表项命名:item_描述.xml
例如:item_city.xml
5) 包含项命名:模块_(位置)描述.xml
例如:activity_main_head.xml、activity_main_bottom.xml
注意:通用的包含项命名采用:项目名称缩写_描述.xml
例如:xxxx_title.xml
1.6.2. 资源文件(图片drawable文件夹下):
全部小写,采用下划线命名法,加前缀区分
命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色
说明:用途也指控件类型(具体见UI控件缩写表)
例如:
btn_main_home.png按键
divider_maket_white.png 分割线
ic_edit.png 图标
bg_main.png 背景
btn_red.png 红色按键
btn_red_big.png 红色大按键
ic_head_small.png 小头像
bg_input.png输入框背景
divider_white.png白色分割线
如果有多种形态如按钮等除外如 btn_xx.xml(selector)
名称
功能
btn_xx
按钮图片使用btn_整体效果(selector)
btn_xx_normal
按钮图片使用btn_正常情况效果
btn_xx_pressed
按钮图片使用btn_点击时候效果
btn_xx_focused
state_focused聚焦效果
btn_xx_disabled
state_enabled (false)不可用效果
btn_xx_checked
state_checked选中效果
btn_xx_selected
state_selected选中效果
btn_xx_hovered
state_hovered悬停效果
btn_xx_checkable
state_checkable可选效果
btn_xx_activated
state_activated激活的
btn_xx_windowfocused
state_window_focused
bg_head
背景图片使用bg_功能_说明
def_search_cell
默认图片使用def_功能_说明
ic_more_help
图标图片使用ic_功能_说明
seg_list_line
具有分隔特征的图片使用seg_功能_说明
sel_ok
选择图标使用sel_功能_说明
注意:
使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范。
1.6.3. 动画文件(anim文件夹下):
全部小写,采用下划线命名法,加前缀区分。
具体动画采用以下规则:
模块名_逻辑名称
逻辑名称
refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml
普通的tween动画采用如下表格中的命名方式
动画命名例子
规范写法
fade_in
淡入
fade_out
淡出
push_down_in
从下方推入
push_down_out
从下方推出
push_left
推向左方
slide_in_from_top
从头部滑动进入
zoom_enter
变形进入
slide_in
滑动进入
shrink_to_middle
中间缩小
1.6.4. values中name命名
类别
命名
示例
strings
strings的name命名使用下划线命名法,采用以下规则:
模块名+逻辑名称
main_menu_about 主菜单按键文字
friend_title好友模块标题栏
friend_dialog_del好友删除提示
login_check_email登录验证
dialog_title 弹出框标题
button_ok确认键 loading加载文字
colors
colors的name命名使用下划线命名法,采用以下规则:
模块名+逻辑名称 颜色
friend_info_bgfriend_bg transparent gray
styles
styles的name命名使用Camel命名法,采用以下规则:模块名+逻辑名称
main_tabBottom
2.1 代码编写格式要求
2.1.1代码应该用 UNIX 的格式
2.1.2 缩进
4个空格常被作为缩进排版的一个单位。缩进的确切解释并未详细制定(空格、制表符)。一个制表符(Tab)等于8个字符(而非4个)。
注意:使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度
例如:
public class className
{
public void methodName()
{
if(……)
{
for(……)
{
//some sentences
}//end for
}//end if
}//end method methodName
}
2.1.3 行长度
尽量避免一行的长度超过120个字符,因为很多终端和工具不能很好的处理。
页宽应该设置为120个字符。源代码一般不会超过这个宽度并导致无法完整显示,但这一设置也可以灵活调整。
在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行。一条语句折行后,应该比原来的语句再缩进2个字符。
注意:用于文档中的例子应该使用更短的行长,长度一般不超过70个字符。
2.1.4换行
当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:
页面上不要有过多无意义的换行
在一个逗号后面断开
在一个操作符前面断开
宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开
新的一行应该与上一行同一级别表达式的开头处对齐
如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。
//换行对齐----------------------------------------------
public final static String SQL_SELECT_PRODUCT = "SELECT * "
+ " FROM TProduct WHERE Prod_ID = "
+ prodID;
2.1.5 {} 对
{} 中的语句应该单独作为一行,左括号”{“写在一行的下一行,并与一行开头对齐),右括号”}”永远单独作为一行且与其匹配行对齐,并尽量在其后说明其匹配的功能模块。较长的方法以及类、接口等的右括号后应使用//end …等标识其结束。
例如:
public class className()
{
public void methodName()
{
if(i > 1)
{
for(……)
{ //左花括号位置
//some sentences
} //右花括号一定是另起一行并与左花括号对齐
} //右花括号后尽量说明对应的功能块如:end if(i>1)
}//end method methodName
}//end class className
2.1.6操作符
操作符左右应该都有个空格。例如:int a = b
2.1.7括号
左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格。
下面的例子说明括号和空格的错误及正确使用:
CallProc( param ); // 错误
CallProc(param); // 正确
不要在语句中使用无意义的括号。括号只应该为达到某种目的而出现在源代码中。
下面的例子说明错误和正确的用法:
if ((i) = 42) { // 错误 - 括号毫无意义
if (i == 42) or (j == 42) then // 正确 - 的确需要括号
2.2 程序中的注释
注释代码的方式很大地影响着开发人员的工作效率以及所有维护改进代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使开发者在开始撰写代码之前仔细考虑这些代码,从而带来更高的工作效率。
Java程序中编写注释的一些基本注意点:
2.2.1注释应该增加代码的清晰度
代码注释的目的是要使代码更易于被同时参与程序设计的开发人员以及其他后继开发人员理解。
2.2.2“如果你的程序不值得注释,那么它也很可能也不值得运行”
2.2.3避免使用装饰性内容
不要使用象广告横幅那样的注释语句。要写的是清晰的代码,不是外表可爱的代码。
2.2.4保持注释的简洁
最好的注释应该是简单明了的注释。注释不必洋洋洒洒,只需提供足够的信息使别人能够理解你的代码。
2.2.5先写注释,后写代码
写代码注释的最好方法是在写代码之前就写注释。这使开发者在写代码之前可以想想代码的功能和运行。而且这样确保不会遗漏注释。另一种方法是边写代码边写注释。因为注释可以使代码更易理解,所以在程序开发的过程中,也可以利用这一点。如果打算花些时间写注释,那么至少你应从这个过程中获得些什么。
2.2.6注释信息不仅要包括代码的功能,还应给出原因
如下面例子中的代码显示金额在 $1,000 以上(包括 $1,000)的定单可给予 5% 的折扣。为什么要这样做呢?难道有一个商业法则规定大额定单可以得到折扣吗?这种给大额定单的特殊是有时限的呢,还是一直都这样?最初的程序设计者是否只是由于慷慨大度才这样做呢?除非它们在某个地方(或者是在源代码本身,或者是在一个外部文档里)被注释出来,否则阅读者不可能知道这些。
if (grandTotal >= 1000.00){
grandTotal = grandTotal * 0.95;
}
Java有三种注释语句风格:以 /* 开始, / 结束的文档注释;以 / 开始,以 / 结束的C语言风格注释;以及以 // 开始,代码行末尾结束的单行注释。