




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 风格务必保持一贯性(Consistent)一位同胞顶着我的鼻子问,为什么我们的Java代码缩进格式非得是这样,而不能是他那样,他就是喜欢他自己的这一种,因此他写的代码总是用他自己习惯的风格。结果在Code Review里被大家毙掉,责令修改。因此他是大大地不服。就是风格一贯性问题。其实他的风格,本来也没有什么问题,但在项目里,和其他程序员的程序的风格,显得扃异,那就存在问题了。比如这个缩进,又比如变量命名方法,不同的类,不同的Methods里,各自不同,这程序就很难看了。所以一旦你选择了某种风格,一定要贯彻始终。如果一个项目里规定了一个风格,即便很不符合你自己的习惯,也要贯彻始终,绝不应该有标新立异。2. 缩进风格(indent)既然是从缩进说起,就先说说缩进风格;一般来说,象Java这样的类C语言,都采用缩进风格。而常用的,有四种A.K&R风格这是C程序最早的缩进风格,由C的发明者Ritchie和他的合作者Kernighan率先使用:if () 其特点,是大括号和if判断在同一行。通常,缩进为8个空格或一个tab键,但在C+和Java里,也常缩进4个空格。有人喜欢用两个空格,窃以为不好,不明显。B. BSD 风格又称Allman Style,源自Unix BSD程序员Eric Allman-他为BSD写过很多程序:if ()特点:大括号和条件判断分在两行。C. Whitesmith风格这种风格源于Whitesmith C:if ()D. GNU风格这种风格仅见于GNU EMACS的源程序中:if ()那么在Java里用哪种好呢?建议只采用A或B。SUN有一个Java Code Name Convention,建议的是A。3. Tab还是空格(Tabs vs Space)还是缩进问题。那么一次缩进应该多大距离?是八个空格键,还是一个Tab键?Java有一个特点,就是跨平台性。不过跨平台指的是它的Class可以在不同平台的虚拟机上运行。Java的源程序,有时候可不是跨平台的。什么?源程序还能不跨平台?是的。有次一个程序员送来一些Code,在我的环境里打开,程序难看得一塌糊涂,有该缩进的地方,没有缩进,有的则缩进一大截,如同怪石一样,嶙峋参差。这样的代码质量可不行!叫来程序员一问,答曰在他那里漂亮得很啊,他还专门花时间去美化它们了呢?原来他的缩进没有注意一个风格,在有的地方用Tab键,有的地方打空格。在一些不同的平台上,Tab键的宽度可是不一样的。说道这里,相信大家比较清楚了,在缩进的时候,尽量不用Tab,而是用空格。好在许多编辑器,都可以把你的键盘上的Tab键定义成几个空格。赶紧去定义它!每次用多少空格呢?4个。2个太少不明显,8个太多占空间。4. 行宽说道8个空格键占空间,那么我一行有320列,8个空格算什么?打住!请寄住,一行尽量不要超过80列。许多终端一个屏幕只能显示80列,为它们想想巴。如果你的语句太长,想办法折断它,分几列来写。5. 变量命名SUN Java Code Convention里定义了Java里package, class, method和普通变量的命名规则,方法、变量与常量的命名规则关于包、类及接口的命名规则,在上面的章节中已经讲解过,在此就不再赘述了,本节讲解在Java程序设计中,有关方法、变量与常量的命名规则相关的知识。1.10.1 方法的命名规则方法一般来说都是动词,第一个字母应该小写,在多个单词混合的情况下,第一个单词后的所有单词的第一个字母大写,其余字母小写,例如下面的代码:run(); runFast();getBackground();在方法的声明部分,通常要提供对方法功能的描述,以及方法中返回值与参数的说明,例如下面的代码:/* 显示系统信息方法* param message 系统信息参数* return message 返回系统信息*/public String showMessage (String message) / statements;return message;如果该方法在软件产品的不断升级中已经不被建议使用了,可以通过在方法声明注释部分添加关键字deprecated实现。1.10.2 变量的命名规则变量的命名规则是,除了变量(variable),所有对象的实例(instance),类(class)与类的常量(constant)的第一个字母应该小写,在多个单词混合的情况下第一个单词后的所有单词的第一个字母大写,其余字母小写的规则之外。变量的第一个字母即使系统允许,也不要为_或者$。变量名字因该紧凑而有意义。变量的名字应该是易记忆、易于理解的,即使间隔较长的时间也可以依其名而知其意。另外单字符的变量名应该尽量避免,除非临时变量,例如,一些整数单字符临时变量:i,j,k,m,n等以及单字符变量:c,d,e等,如下所示的代码:int i;char c;float imageWidth;1.10.3 常量的命名规则Java中的常量一般采用大写字母单词命名,单词与单词之间用下划线(_)加以分割,这符合ANSI的常量命名规则,如下所示的代码:static final int MIN_WIDTH = 14; static final int MAX_WIDTH = 1000; static final int GET_THE_MEMORY = 128; &注意 关于关键字static与final的用法,我们将在下面章节做详细的讨论。上面讨论了Java语言中的代码编写风格及相关格式与书写规则,下面做一个简单Java程序设计的实践,从中掌握所学过的知识。1.11 Java编程实践通过四个方面来讲解Java程序设计风格与格式规则,这是编写大师级代码的基础。1.11.1 访问实例与类中变量的规则一般情况下,都不要将类中的变量声明为公共类型(public),除非设计要求如此,如果变量不是公共类型的,这样只能通过public类型方法去访问相关变量,如:getXX()方法等。如果你创建的类中没有任何行为方法,此时你不得不将这个类中的变量声明为公共(public)类型,以供外界访问。1.11.2 引用类中的静态变量与方法的规则当你试图在你的代码中引用类的静态方法或静态成员变量时,不要通过该类的实例对象引用它们,尽管这样是允许的。你应该通过类来引用它们,如下所示的代码:public static classMethod(); MyClass.classMethod(); / 正确myObject.classMethod(); / 不正确(应该避免)1.11.3 变量赋值规则尽量避免在一个单行语句中将一个变量赋多个值,这样将使代码变得艰涩、难懂,例如下面的代码:userName = = jerry lin; / 这种赋值方式应尽量避免尽量避免对一元表达式赋值,例如下面的代码在Java中是绝对不允许的:if (i+ = m+) .当然可以修改为下面的方式,便可以逃避语法错误,不过这是不被推荐使用的:if (c+ = d+) != 0) .尽量避免嵌套赋值,这样会浪费编译器较多的时间,例如下面的代码:d = (a = b + c) + r; 上面的赋值方式应修改为下面的方式:a = b + c;d = a + r;1.11.4 综合规则1括号规则应尽量使用括号()来界定表达式的结合顺序,避免由于运算符优先级的问题而导致非主观意图错误,即使你对运算符优先级比较了解而且代码看起来也比较清晰,但是其他程序员看这段代码未必像你一样清楚,例如下面的代码:if (i = j & m = n) / 应尽量避免if (i = j) & (m = n) / 正确2返回值规则应尽量使程序结构与你的意图匹配,例如:if (isTrue) return true; else return false;上面的程序有些“受累不讨好”的感觉,应该修改为:return isTrue;相似的有,if (condition) return x;return y;应该修改为: return (condition ? x : y);3特殊注释规则你可以在程序中通过一些特殊注释来表示你的伪代码,例如,用EXECUTE表示该代码有问题但是可执行,用FIXME表示代码有问题切不可执行,例如下面的代码:if (isTrue) / EXECUTEint i = 0;i+; else / FIXME 因为i没有被声明i+;到此为止,关于Java程序设计的代码风格与格式规则就全部讲解完了,希望你们在自己的代码中尽量应用,开始应用可能不太习惯,但是只要坚持下去,相信你会发现采用良好代码风格进行程序设计的种种好处,并且逐渐会对它产生倾慕与依恋。小结本章详细地讲解了有关Java程序设计风格的知识,其中包括:Java文件名与文件组织结构,Java文件注释头,包的声明与引用,类(class)与接口(interface)的声明,Java源文件编排格式,Java程序注释,变量的声明初始化与放置,Java程序语句编写规则,空格与空行的应用规则,以及Java程序设计中方法、变量与常量的命名规则等相关知识,本章最后还给出了在Java编程实践中的三个规则( 访问实例与类中变量的规则; 引用类中的静态变量与方法的规则; 变量赋值规则)。通过对上述知识的学习,只要你能够坚持上面的编写规则,仅从代码风格上来讲你已经具备了编写大师级Java代码风格的能力了,这就是你学习本章的收获。要继续向大师级Java代码的核心靠近,就请继续认真学习本书下面的章节。这里提提一些注意事项和一些SUN没提到但大家常用的方式。a. 用有意义的名字命名变量首先,用完整的英语单词或约定俗成的简写命名你的变量,如:firstNamezipCode如果英语不够好,至少用别人看得懂的拼音命名,如zhuZhi (住址)胡乱简写,或者胡乱命名,则没有人看得懂你的变量的含义:fnzczzb. 常量用全大写加下画线命名Java里的常量,就是static final:static final SMTH_BBS=;c. 用复数命名collection类变量collection包括数组,vector等。命名时请用复数:customersclassMates也可以用一些修饰词命名:someStudentsallDepartmentsd. 循环变量一般大家都用i, j, k等做循环变量。e. Stream变量一般习惯用in, out作为Stream变量,对应inputStream, outputStream类。如果即读又写的ioStream,可以用inOut。f. 变量的命名习惯习惯MFC的人喜欢采用匈牙利命名法(Hungarian Notation)。如果你习惯这样,尽管用,但注意要和同Project的人保持一致。还有些人习惯C+里的下画线方式,也可以采用。Hungarian Notation:sFirstNameUnder Score Style:_firstName这里提供一个Hungarian Notation的前缀命名习惯:int ibyte bchar cdouble dfloat flong loffset offlength lenObject oString s (or str)Arbitray value v6. Java文件格式有许多方式定义你的文件语句格式,以下是一个例子:a. 文件头说明 (可无)b. Package定义c. 空行d. Import语句e. 空行f. 类定义如:package com.midi;/Java Classesimport java.awt.*;import java.io.*;import javax.swing.event.*;/WebLogic Classesimport ernal.*;/* Blah blah* author midi* version 22.2*/public class MyFirst extends JFrame ./* Foo.* author midi* version 38.2*/class Foo .7. import顺序杂乱无章的顺序,看起来很不顺眼。应该对你要import的classes归类,按顺序罗列:a. Java标准类(java.*)b. Java扩充类(javax.*)c. 第三方类d. 你的应用程序的类而且注意在第三方类里注释它们,说明它们的来源:import java.*;import java.util.Date;import java.util.Enumeration;import javax.sql.*;/Apache Xercesimport org.apache.xml.*;import org.apache.xerces.dom.*;/Application classesimport com.midi.util.*;8. Classes的顺序a. Javadoc注释或者其它文件头注释b. 类声明c. Fields声明d. 空行e. 构造函数f. 空行g. 方法(不包括main)h. 空行i. Inner类j. 空行k. main()例:/* This is a simple DOM tree
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁波十校2025届高三3月联考语文试卷(含答案解析)
- 2024-2025学年新教材高中物理 第二章 匀变速直线运动的研究 第四节 自由落体运动教学实录 新人教版必修1
- 三农产品品牌化经营方案
- 2023一年级数学下册 2 20以内的退位减法第6课时 解决问题(1)配套教学实录 新人教版
- 2024年泰山版小学信息技术二年级上册《8 特快专递没我快》教学设计
- 7可爱的动物(教学设计)-2023-2024学年道德与法治一年级下册统编版
- 2024-2025学年高中历史 第一单元 东西方先哲 第3课 百科全书式的学者亚里士多德(2)教学教学实录 岳麓版选修4
- 新员工入职培训指南
- 2023一年级数学上册 8 20以内的进位加法练习课(2-3)教学实录 新人教版
- 工程施工项目管理合作协议书
- 风水服务合同
- 轴对称图形(课件)-2023-2024学年二年级下册数学人教版-1
- 国际法专题课程大纲
- 12SDX101-2 民用建筑电气设计计算及示例
- 校企共建实验室备忘录
- 好书 读书分享长安的荔枝
- 2024年陕西省高中学业水平合格考数学试卷试题(含答案)
- 河北省建设项目概算其他费用定额
- 起重吊装风险辨识及防范措施
- 2024年江西电力职业技术学院单招职业技能测试题库及答案解析
- 2024-2030年中国循环水加药装置行业市场现状分析及竞争格局与投资发展研究报告
评论
0/150
提交评论