`

java编程的基本原则

阅读更多
1 基本原则
【原则1-1】首先是为人编写程序,其次才是计算机。
说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。

【原则1-2】保持代码的简明清晰,避免过分的编程技巧。
说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。

【原则1-3】所有的代码尽量遵循SUN的《Code Conventions for the JavaTM Programming Language》标准(参见:http://java.sun.com/docs/codeconv/)。
说明:编程时以公司的规范为准,公司的规范没有规定的内容参考上面的标准。

【原则1-4】编程时首先达到正确性,其次考虑效率。
说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,其次考虑程序的效率和资源占用。

【原则1-5】保持一致性,尽可能多的使用相同的规则。

【原则1-6】尽可能复用、修正原有的代码。
说明:尽量选择可借用的代码,对其修改优化以达到自身要求。

【原则1-7】 尽量减少同样的错误出现的次数。
说明:事实上,我们无法做到完全消除错误,但通过不懈的努力,可以减少同样的错误出现的次数。


2 文件结构
程序布局的目的是显示出程序良好的逻辑结构,提高程序的准确性、连续性、可读性、可维护性。更重要的是,统一的程序布局和编程风格,有助于提高整个项目的开发质量,提高开发效率,降低开发成本。同时,对于普通程序员来说,养成良好的编程习惯有助于提高自己的编程水平,提高编程效率。因此,统一的、良好的程序布局和编程风格不仅仅是个人主观美学上的或是形式上的问题,而且涉及到产品质量,涉及到个人编程能力的提高,必须引起大家重视。

2.1 基本格式

【规则2-1-1】源代码文件(.java)的布局顺序是:包、import语句、注释、类。
正例:
package com.zte;

import java.awt.peer.CanvasPeer;
import java.io.*;

import com.zte.ums.uep.*;

/**
* <p>文件名称: 题目名称</p>
* <p>文件描述: 本类描述</p>
* <p>版权所有: 版权所有</p>
* <p>公    司: 有限公司</p>
* <p>内容摘要: // 简要描述本文件的内容,包括主要模块、函数及其功能的说明</p>
* <p>其他说明: // 其它内容的说明</p>
* <p>完成日期:// 输入完成日期</p>
* <p>修改记录1: // 修改历史记录,包括修改日期、修改者及修改内容</p>
* <pre>
*    修改日期:
*    版 本 号:
*    修 改 人:
*    修改内容:
* </pre>
* <p>修改记录2:…</p>
* @version 1.0
* @author  作者姓名
*/

public class ClassName
{
}

【规则2-1-2】遵循统一的布局顺序来书写import语句,不同类别的import语句之间用空行分隔。
说明:package语句其后可跟import语句,而且与package间隔一个空行。import包的排列顺序为java开头的包在最前面,接下来是引自外部的包,再接下来是应用程序自身的包,即import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。
正例:
package com.zte;

import java.awt.peer.CanvasPeer; //java自身的包
import java.io.*;

import com.klg.field.*; //第三方的包

import com.zte.ums.uep.*; //程序自身的包

【规则2-1-3】程序中一行的代码和注释不能超过120列。
说明:包括空格在内不超过120列。

【规则2-1-4】if、else、else if、for、while、do等语句独占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 { }。
说明:这样可以防止书写失误,也易于阅读。
正例:
if (varible1 < varible2)
{
    varible1 = varible2;
}
反例:下面的代码执行语句紧跟if的条件之后,而且没有加{},违反规则。

if (varible1 < varible2) varible1 = varible2; 

〖建议2-1-1〗源程序中关系较为紧密的代码应尽可能相邻。
说明:这样便于程序阅读和查找。
正例:
length = 10;
width = 5;     // 矩形的长与宽关系较密切,放在一起。
strCaption = “Test”;
反例:
length = 10;
strCaption = “Test”;
width = 5;

2.2 对齐
【规则2-2-1】 一般禁止使用制表符,必须使用空格进行缩排。缩进为4个空格。
说明:对于利用JBuilder等编程工具的,可以设置TAB键为4个空格代替。消除不同编辑器对制表符处理的差异。

【规则2-2-2】程序的分界符‘{’和‘}’应独占一行,‘}’同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。
说明:这样使代码便于阅读,并且方便注释。
do… while语句可以例外,while条件可与 } 在同一行。
正例:
void function(int var)
{        
while (condition)
{
doSomething(); // 与{ }缩进4格
} //与引用它们的模块左对齐
}
反例:
void function(int var){
while (condition)
{
doSomething();
}
}

【规则2-2-3】多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。
正例:
    int[][] number =
    {
        {1, 1, 1},
        {2, 4, 8},
        {3, 9, 27},
        {4, 16, 64}
    };

【规则2-2-4】相关的赋值语句等号对齐。
正例:
width = 50;
length = 20;
height = 40;

2.3 空行空格
【规则2-3-1】不同逻辑程序块之间要使用空行分隔。
说明:空行起着分隔程序段落的作用。适当的空行可以使程序的布局更加清晰。
正例:
void doSomething()
{
//[doSomething实现代码]
}
// 空一行
void doOtherThing()
{
[doOtherThing实现代码]
}
反例:
void doSomething()
{
  [doSomething实现代码]
}
void doOtherThing()
{
[doOtherThing实现代码]
}
// 两个函数的实现是两个逻辑程序块,应该用空行加以分隔。

【规则2-3-2】一元操作符如“++”、“--”、“!”、“~”、(类型)等前后不加空格。“[]”“.”这类操作符前后不加空格。
正例:
!value
~value
++count
number[i] = 5;
box.getWidth();

【规则2-3-3】多元运算符和它们的操作数之间至少需要一个空格。
说明:空格的多少根据上下文调整。
正例:
value   =  oldValue;
total   +  value
number +=  2;


【规则2-3-4】方法名之后不要留空格。
说明:方法名后紧跟左括号‘(’。

【规则2-3-5】‘(’向后紧跟,‘)’、‘,’ 、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。
正例:
例子中的 凵 代表空格。
for (i凵=凵0;凵i凵<凵MAX_BSC_NUM;凵i++)
{
doSomething(width,凵height);
}

【规则2-3-6】注释符与注释内容之间要用一个空格进行分隔。
正例:
/* 注释内容 */
// 注释内容
反例:
/*注释内容*/
//注释内容

2.4 断行
【规则2-4-1】长表达式(超过120列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。
说明:
断行方法:
1. 在逗号后断行
2. 在操作符前断行
3. 较高级别断行优于较低级别的断行
对齐方法:
1. 将新行与同一级别的先前行的表达式的起始端对齐。
2. 条件表达式的续行在第一个条件处对齐。
3. for循环语句的续行在初始化条件语句处对齐。
4. 函数调用和函数声明的续行在第一个参数处对齐。
5. 赋值语句的续行应在赋值号处对齐。
6. 如果上述规则导致代码排列混乱或代码左边界少于两个缩进,可用两倍缩进替代。
下面是一些断行方法调用的示例:
正例:
  someMethod(longExpression1, longExpression2, longExpression3,
             longExpression4, longExpression5);
  var = someMethod1(longExpression1,
                   someMethod2(longExpression2,
                               longExpression3));

下面是两个断行算术表达式例子,第一个是优选方法,因为断行出现在括号表达式之外,属于较高级别的断行。
正例:
  longName1 = longName2 * (longName3 + longName4 - longName5)
              + 4 * longname6; //允许的断行方法

反例:
  longName1 = longName2 * (longName3 + longName4
-longName5) + 4 * longname6; //应该避免的断行方法

下面是两个缩排方法的例子,第一个是传统的方式,第二个例子中如果采用传统方式缩排将导致第二行和第三行右边出现太多空白,因此,采用8个空格符替代。
//传统的缩排方法,第二行与第一行的括号对齐。
正例:
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
           Object andStillAnother)
{
    ...//你代码的位置
}

//由8个空格符来替代与括号对齐的方法,以避免第二行、第三行出现太多的空格符
正例:
private static synchronized horkingLongMethodName(int anArg,
        Object anotherArg, String yetAnotherArg,
        Object andStillAnother)
{
    ...//你代码的位置
}

对于if语句的行封装通常使用8空格规则,因为传统的4空格缩排方式使得有些语句容易被忽略掉,使if语句体难以理解。例如:
反例:
//不允许使用下面的缩进方法
if ((condition1 && condition2)
    || (condition3 && condition4)
    ||!(condition5 && condition6))
{  //不好的缩进
    doSomethingAboutIt(); //这样对齐的缩进方式很容易让阅读的人忽略掉这一行
}

正例:
//宜采用下面的缩进方法(分成三行的情况)
if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6))
{
    doSomethingAboutIt();
}

//或使用下面的缩进方法(分成二行的情况)
正例:
if ((condition1 && condition2) || (condition3 && condition4)
        ||!(condition5 && condition6))
{
    doSomethingAboutIt();
}

对于三重表达式,有三种方式可以对它进行换行缩排:
正例:
//单行的情况
alpha = (aLongBooleanExpression) ? beta : gamma;
//分成两行的情况,第二行的冒号与第一行的问号对齐。
alpha = (aLongBooleanExpression) ? beta
                              : gamma;
//分成三行的情况,第二行的问号和第三行的冒号都与第一行的括号对齐
alpha = (aLongBooleanExpression)
       ? beta
       : gamma;

【规则2-4-2】方法声明时,修饰符、类型与名称不允许分行书写。
正例:
public static double calculateArea(double width, double height);
反例:
public static double
calculateArea(double width, double height);
分享到:
评论

相关推荐

    Java并发编程设计原则和模式

    在Java编程领域,并发编程是一项核心技能,尤其是在多核处理器和分布式系统中,它能显著提升应用程序的性能和响应速度。本资料“Java并发编程设计原则和模式”深入探讨了如何在Java环境中有效地进行并发处理,以充分...

    java编程规范编程原则

    ### Java编程规范与基本原则 #### 一、引言 Java作为一种广泛应用的编程语言,其代码的质量不仅直接影响到软件系统的稳定性与可维护性,而且对于团队协作有着不可忽视的影响。因此,建立一套统一且高效的编程规范...

    Java并发编程设计原则与模式.pdf

    通过阅读《Java并发编程设计原则与模式》,开发者可以掌握Java并发编程的核心技术,为构建高效、稳定、可扩展的并发应用程序打下坚实基础。这本书不仅适合初学者,也对有经验的开发者有很高的参考价值。

    JAVA编程规范.pdf

    JAVA编程规范.pdf 本文档提供了JAVA编程规范的详细说明,涵盖了类和方法的设计、编程原则、命名约定等方面的内容。 类和方法的设计 在设计类和方法时,需要遵守一些基本原则。首先,类应该具有强大的内聚力,即类...

    java语法大全,java语法,java编程基础,java入门

    此外,还会讲解面向对象编程(OOP)的基本原则,如封装、继承和多态。封装是将数据和操作数据的方法捆绑在一起,以保护数据不受外部干扰;继承允许一个类(子类)继承另一个类(父类)的属性和方法,实现代码重用;...

    一本经典的多线程书籍 Java并发编程 设计原则与模式 第二版 (英文原版)

    《Java并发编程 设计原则与模式 第二版》是一本深受程序员喜爱的经典书籍,由Addison Wesley出版。这本书深入探讨了Java平台上的多线程编程技术,为开发者提供了丰富的设计原则和模式,帮助他们理解和解决并发环境中...

    Java程序设计精讲课件

    Java程序设计精讲课件是一套全面讲解Java编程的教育资源,主要涵盖了泛型、集合类、Java输入输出以及反射等核心概念。这套课程旨在帮助初学者深入理解和熟练掌握Java编程技术,同时也适合有一定基础的开发者进行知识...

    java数据库应用程序编程指南

    在Java编程领域,数据库应用程序开发是一项至关重要的技能。本指南将深入探讨如何使用Java与数据库进行交互,特别是针对Oracle数据库的编程。以下是基于标题、描述和标签所涉及的知识点的详细说明: 1. **Java...

    JAVA编程百例JAVA编程小例子

    此外,也会涵盖封装、继承和多态等面向对象编程的基本原则。 4. **接口**:Java中的接口用于定义多个类可以实现的行为规范。实例会展示如何声明接口,以及如何在类中实现接口。 5. **异常处理**:Java的异常处理...

    java程序设计课件

    Java程序设计是计算机科学中的一个重要领域,主要涉及使用Java编程语言进行软件开发。Java是一种广泛应用于服务器端、桌面应用、移动应用(尤其是Android平台)的高级编程语言。天津大学计算机系提供的这门java程序...

    Java程序与设计

    总之,Java程序与设计的学习是一个全面的过程,涵盖了从基本语法到高级特性的各个方面,同时也强调了良好的编程习惯和软件设计原则。对于想要进入IT行业的学习者来说,掌握Java语言和其设计思想,无疑会为他们的职业...

    2018年9月 Java9编程参考官方大全 第10版.rar

    畅销书作家Herbert Schildt在本书中详尽地讲解了Java语言,包括Java的语法、关键字和基本编程原则,以及Java API库的主要内容,如I/O、集合框架、流库或并发实用程序。另外,《Java 9编程参考官方大全(第10版)》还...

    java编程思想(pdf格式)

    这是面向对象编程的一个基本原则。在Java中,几乎所有的元素,包括基本类型,都可以被封装为对象。例如,整数可以是Integer对象,字符串可以是String对象。这一原则使得代码更具可扩展性和可维护性。 3. **控制...

    java的里氏代换原则

    里氏代换原则是面向对象设计的基本原则之一,源自于著名数学家贝努利·里氏的一个概念。在Java编程中,它对于理解和构建可扩展、健壮的软件系统至关重要。简单来说,里氏代换原则(LSP,Liskov Substitution ...

    Java编程QQ,计算机

    Java编程在IT领域中占有重要地位,特别是在开发跨平台应用程序方面。本项目包含两个使用Java语言编写的程序:一个简单的QQ模拟程序和一个计算器。这两个程序可以作为学习Java基础、面向对象编程以及GUI(图形用户...

    java语言程序设计课后编程题答案答案

    本资源“java语言程序设计课后编程题答案答案”聚焦于Java编程的基础篇,提供了课后练习题的解决方案,帮助学习者巩固所学知识,提升编程技能。 Java编程题通常涵盖以下几个核心领域: 1. **基本语法**:包括变量...

    Java程序性能优化 让你的Java程序更快、更稳定附本书示例代码(清晰版)

    首先,我们来探讨Java性能优化的基本原则。性能优化的目标不仅仅是提高速度,更重要的是确保程序的稳定性和可维护性。优化过程中,应该遵循“测量先行”的原则,使用如JProfiler、VisualVM等工具进行性能分析,找出...

Global site tag (gtag.js) - Google Analytics