二、格式规范

在上一篇的Java编程风格学习(一)中我们讲述了在Java编码中的一般原则,虽然这些原则并不涉及具体的代码规范,但是这些原则却是我们在Java开发过程中所应该遵循的规范与思想。今天我们将学习一些涉及具体代码书写的格式规范。

(一)缩进嵌套的代码

为了增强代码的可读性,我们常常把一些单独的语句组织成语句块,并对各块统一缩进使之与周围代码分开。

1、如果我们使用开发环境,则我们可以使用开发环境提供的缩进样式。但是如果我们是手写代码,应该使用两个空格缩进。

class MyFuction {
··void function(int arg) {
····if (arg < 0) {
······for (int i = 0; i <= arg; i++) {
········// ...
······}
····}
··}
}

2、块语句起始端的大括号应该放在引入块语句那一行的最后,结束端的大括号要独占一行,并且与引入嵌套语句那一行的第一个字母对齐。我们日常使用的代码规范如下:

类定义:

public class MyClass {
···
}

内部类定义:


public class OuterClass {
···
class InnerClass {
...
}
}

方法定义:

void method(int j) {
···
}

for循环语句:

for (int i = 0; i <= j; i++) {
···
}

if-else语句:

if (j < 0) {
···
}
else if ( j > 0) {
···
}
else {
···
}

try,catch,finally块:

try {
···
}
catch {
···
}
finally {
···
}

switch语句:

switch (value) {
case 0:
···
break;
default:
···
break;
}

while语句:

while (a < b) {
···
}

do-while语句:

do {
···
} while (a < b);

为了提高一个团队的工作效率,不要让每个组员任意选择各自代码里的缩进量及样式,应该制定统一的一套标准的缩进规则,并且确保团队里的每个人都遵循这个标准。

(二)断开长句

尽管在窗口化的现代编辑器中,可以利用横向滚动条来阅读很长的单行代码。但是打印机对于超过它最大打印宽度的语句,就会把它们截断、换行或者打印在不同的页上。因此,要把每行代码的长度限制在打印环境所支持的最大宽度之内,这个值一般是80或者132个字符。

1、不要把多个语句放在同一行里以免超过最大可接受宽度。应该一条语句放置在一行里。

//  这样写太长
double x = Math.random(); double y = Math.random(); // 应该一句占一行
double x = Math.random();
double y = Math.random();

2、如果一行代码中包含了复杂的表达式,就应该把它拆分为几个短小的子表达式,每个子表达式的运算结果存储在一个临时变量里,并且单独放置在一行。

//  这样的表达式太长
double length = Math.sqrt(Math.pow(Math.random(),2.0),Math.pow(Math.random(),2.0)); // 应该按下面这样拆分
double x = Math.pow(Math.random(),2.0);
double y = Math.pow(Math.random(),2.0);
double length = Math.sqrt(x + y);

(三) 使用空白

空白就是页面上没有可见字符的区域。代码里如果空白太少就会不易阅读和理解,所以应该使用足够多的空白把方法、注释、代码块和表达式展示清楚。

1、以下情况使用单空白来分隔:

(1)、右括号")"或者紧随其后的关键字;关键字和紧随其后的左括号"("或者"{";右括号")"和紧随其后的左括号"{";其实细心的读者会发现在上述内容的介绍中已经应用了这些规范,在此就不赘述了。

if (j < 0) {
···
}
else if ( j > 0) {
···
}
else {
···
}

(2)、除了"."之外的运算符与其前后的表达式之间。

double length = Math.sqrt(x * x + y * y);
double x = length > 0.0 ? (x / length) : x;

2、以下情况应该使用空行来分隔:

(1) 每个逻辑上独立的方法实现之间

void handleInfo(Message message) {

  DataInput content = message.getDataInput();
int messageType = content.readInt(); switch (messageType) { case warning:
...
break; case error:
...
break; default:
...
break;
}
}

(2) 定义类或者接口时,每个成员之间使用空行

public class Car {

  class InnerCar {
...
} private Bar bar; Foo(Bar bar) {
this.bar = bar;
}
}

(3) 源文件中,每个类和接口的定义之间要使用空行

interface Paly {
...
} public class Person implements Play{
...
}

(四)不要直接使用Tab控制符
> 不同的环境对Tab控制符的解释也是不同的,代码的格式在原来的编辑环境下可能正确无误,但是如果放到另一个对Tab控制符有不同解释的系统中,可能格式混乱、无法阅读。

为了避免出现以上的情况,我们应该使用空格来缩进代码。在一个团队中,应该设置团队通用的缩进标准,并且团队里的所有人都严格遵守这个标准。

Java编程风格学习(二)的更多相关文章

  1. Java编程风格学习(三)

    在上一篇的java编程风格学习(二)中我们学习了一些在Java编码过程中的格式规范,遵循这些规范毋庸置疑是我们的书写高质量代码的前提与基础.今天我们更进一步,一起来学习Java编程的命名规范,向着编写 ...

  2. Java编程风格学习(一)

    最近在看一本有关Java编程规范的书,书中精炼阐述了使用java语言时应该遵循的一些原则.接下来的一段时间我将在这里总结我的学习内容,也希望这一系列文章能够对有需要的人有所帮助.不考虑任何编码规范的代 ...

  3. Java编程思想学习(二) 操作符

    1. 对象“赋值”:对一个对象进行操作时,我们真正操作的是对对象的引用.所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方.(引用于对象之间存在关联,但这种关联可以被改 ...

  4. Java编程思想学习(二)----一切都是对象

    2.1用应用操作对象 String s; 这里所创建的只是引用,并不是对象.如果此时向s发送一个消息,就会返回一个运行时错误.这是因为此时s没有和任何事物关联.因此,一种安全的做法是:创建一个引用的同 ...

  5. Java学习笔记(四)——google java编程风格指南(上)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  6. Java学习笔记(六)——google java编程风格指南(下)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  7. Java学习笔记(五)——google java编程风格指南(中)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  8. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...

  9. Google Java编程风格指南中文版

    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...

随机推荐

  1. PHP大小写问题

    PHP对于系统函数.用户自定义函数.类名称等是不区分大小写的如可以用EHCO也可以用echo调用显示函数, 但对于变量名称又是区分大小写的,如$Name和$NAME是2个不同的变量. 而对于文件名又因 ...

  2. Python的zip函数

    zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表.具体意思不好用文字来表述,直接看示例: 1.示例1: x = [1, 2, 3] y = [4, 5, 6] z = [7 ...

  3. Nodejs之模板ejs

    ejs使用说明及介绍. 1.创建ejs项目 express -e test  //创建模板为ejs的项目,默认为jade. 2.使用 app.js中添加 var ejs = require('ejs' ...

  4. 【蓝牙数据采集模块】-02-Sensor Controller 编写CC2650STK外设驱动

    上次说到把所有的传感器模块在Sensor Controller中实现读写,并封装驱动. 先来看一下CC2650STK的原理图 用红色方框标记的DIO_0~DIO_7, DIO_23~DIO_30是可以 ...

  5. 【WebStorm】前端工具开发利器webstrom专篇...更新中

    http://my.oschina.net/maomi/blog/137807#OSC_h2_5 WebStorm混搭svn WebStorm混搭nodeJS webstorm简单介绍 webstor ...

  6. HibernateSessionFactory类中Session对象的创建步骤

    HibernateSessionFactory类中Session对象的创建步骤: 1.初始化Hibernate配置管理类Configuration 2.通过Configuration类实例创建Sess ...

  7. noip2016天天爱跑步

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...

  8. JIRA描述默认值设置

    JIRA描述默认值设置 Setting a Default Value in the Description Field 转自https://confluence.atlassian.com/jira ...

  9. 算法一之N皇后问题

    (写这篇文章主要是明天就要考试了,算法考试,今天不想再复习了,xiang着今天也开通了博客,于是在这个平台上进行复习,应该会更高效.最后祝愿我明天考个好成绩.嘻嘻...) n皇后问题,主要是应用到回溯 ...

  10. 搭建Node.js开发IDE环境WebStrom5 多图

    1.下载前期准备 node.js下载地址 http://nodejs.org/ WebStrom5下载地址: http://download-ln.jetbrains.com/webide/WebSt ...