Skip to content
何熹 edited this page Jun 16, 2015 · 1 revision

Java开发的 Code Style

部分参考了Google code style

Code Style

Fully Qualify Imports

尽量使用import foo.Bar 而不是import foo.。例外是使用java标准库或者测试库的时候,(java.util., java.io., etc.)(junit.framework.)

编写短的方法

比如超过40行的代码就可以考虑是否拆分了。

成员变量的声明

在文件顶部或者使用该变量函数前面声明

import的顺序

  1. Android相关库的import
  2. 第三方库的import
  3. java和javax

使用空格缩进

  1. 代码块使用4个空格的缩进。不要使用tab(编辑器设置中,使用4个空格代替tab)
  2. 折行使用8个空格的缩进,比如
Instrument i =
        someLongExpression(that, wouldNotFit, on, one, line);

上面的两条是Android Studio的默认配置,不需要调整设置。

花括号不要换行

block必须使用加上花括号,即使只有一行代码

class MyClass {
    int func() {
        if (something) {
            // ...
        } else if (somethingElse) {
            // ...
        } else {
            // ...
        }
    }
}

成员变量的声明

所有的成员变量声明都不要使用加m或者s前缀的形式。

注解

Annotation必须先于任何其他的修饰符,一个Annotation使用一行,多个Annotation使用字母顺序排列。

当使用了标记为过期的方法的时候@Deprecated必须使用

子类重写父类方法的时候,必须使用@Override

当使用@SuppressedWarning的时候,必须加上TODO,来解释为什么。例如:

// TODO: The third-party class com.third.useful.Utility.rotate() needs generics 
@SuppressWarnings("generic-cast")
List<String> blix = Utility.rotate(blax);

尽量使用android.support.annotation库提供的注解

  1. 有返回值的方法使用@Nullable或者@NonNullable方法标注返回值是否为空。(也可以使用Guava库的Optional类)
  2. 参数如果是使用的Android的resource,使用@StringRes,@DrawableRes,@LayoutRes等等标注

把常见的缩写当成一个单词,对常见的缩写不使用全部大写的形式

比如: XmlHttpRequest,getCustomerId, class Html, String url, long id

而不是写成XMLHTTPRequest, getCustomerID, class HTML, String URL, long ID

使用TODO注释

临时代码,或者暂时的解决方案,以后要修改的方案,使用TODO注释

// TODO: Change this to use a flag instead of a constant.

AndroidStudio里面可以查看所有的TODO

log

仅仅测试环境使用日志可以使用hugo库。

所有的日志使用Log库打印,tag和当前的类名一致

测试

测试中的函数名使用下划线分隔,并且测试函数名字尽量使用长句,直接通过函数名就可以猜测出该测试的意图

方法排列顺序最好按照调用次序从上到下排列

Android开发的 Code Style

尽可能遵守,看情况违背

目录表

layout

以activity或fragment + 类名开头

AccountActivity 的布局-> R.layout.activity_account

对于公用的布局,看情况,比如

R.layout.viewpager_layout

id 资源

2个词之间以_分割

  • 控件的id

因为Android这里是强转的,编译器无法发现类型错误,所以用类似匈牙利系统命名法

TextView -> R.id.tv_xxx

Button -> R.id.btn_xxx
  • 获取view

代码中尽量使用ButterKnife来获取view

@InjectView(R.id.lv_list)
public ListView listView;
  • 菜单的id

全部以menu_开头,比如

R.id.menu_save

R.id.menu_close

菜单

/res/menu 文件夹下面,分别是这样:

R.menu.actionbar_menu_xxx

R.menu.contextual_menu_xxx

R.menu.popup_menu_xxx

图片资源

/res/drawable 里面存放 xml 格式的图片

亮色系图片 R.drawable.xxx_light

暗色系图片 R.drawable.xxx_dark

icon以ic开头 R.drawable.ic_xxx_light

background图片以bg开头 R.drawable.bg_xxx_dark

字符串

string 资源,2个词之间以_分割

  <string name="add_topic">添加话题</string>
  <string name="add_topic_hint">不需要#号</string>

样式

style资源,首字母小写,后面词首字母大写

##Preference 设置的资源

string,title 是 pref_xxx_title 这样的形式,summary 是 pref_xxx_summary

##Activity和Fragment的命名

动词+名词+Activity或者Fragment

名词+Activity

如果是 Dialog,可以省略 Fragment 或者 Activity

 UpdateRemarkDialog
 SearchUserFragment