Java平台(其实整个编程界)有着一套很好的命名惯例。所谓惯例,可以理解为“约定俗成”。类似我们常见的《命名规则》《编码规则》《SQL文规则》等,经过提炼,可以基本看出里面的“规律”。
“约定”对于编程来说,意义远大于在其他领域。在Rails中,甚至是“约定大于配置”的。
具体到Java的一系列命名惯例,首先是包名。和.Net中的namespace类似,Java中的package是为了区别不同人、不同公司编写的可能名字相同的类用的,其实这句话应该反着说,因为是Java首先这么用的。而且和MS对namespace的无推荐不同,Sun推荐包名按照域名的逆序来书写,而且全是小写字母,每一层尽量是一个英文单词(名词最好)。尽量一个单词,而且尽量不大于8个字母,所以鼓励使用缩写。例如,使用util而不是utilities(有人也用utils)
2)类和接口(接口其实也是类,Java中万物皆类)的名字采用 Pascal命名法,即每个单词的首字母均大写,各个单词间无连接符。对于一些英文缩写,也推荐除首字母以外都小写。如,HttpUrl,而不是HTTPURL。这里尤其要注意的是仅有两个字母的缩写,如IO,ID,IP(呵呵,碰巧都是I字辈的),最好还是写成 DiskIo,UserId,TerminalIp。
3)类成员(属性和方法)名、局部变量名要用 驼峰命名法,即除首单词的首字母要小写外,其他同Pascal命名法。(这一点和.Net不同,.Net中除私有类成员外,都是Pascal命名法)
4)常量,用全大写,各个单词见用下划线“_”相连接。
5)getter/setter方法,getter/setter其实就是普通的方法,只是一种特定用途罢了。它们用于将被封装的私有属性对外提供访问的方法。通常是在属性名的前面加上 get 和 set ,再将属性名的首字母变大写。
这里的一个特殊地方是boolean型变量,除了之上的方法,也可以把 get 改为 is,如果属性名本身已经是以 is 开头了,就省掉这个 is 。这是 JavaBean 的规范,广义上讲,也可以用一个名词或名词短语,如:size,hashCode
(补充一点:C# VB.Net AS3 都有自己的“属性”语法,有人指为语法糖,但也不失为是一种使用更简单的方式,其本质还是和 Java”标准的”getter/setter 一样的,总之是对私有属性的封装)
6)特殊方法和属性:
静态工厂方法(见【第1条】):valueOf 和 getInstance 前者广泛用于对值类的类型转换,后者则出现在非值类的单例模式中
类型转换方法:toType,如 toString,toArray
返回当前对象的一个不同的视图:asType,如:asList,常用 Arrays.asList() 来将数组转换成List
一些省略了开头的“is”的boolean型属性,如 initialized 和 composite
一些常用的通用属性,如:height,digits,size 等
一些常用的通用方法,如:flush(),isEmpty() 等
7)在对英文单词的选择上,也尽量复合大多数人的习惯。
避免使用一些蹩脚的单词,而是使用常见的单词,而且最好是其他人也大多使用的单词。在对两个单词模棱两可时,可以在Javadoc中搜索一下,看看哪一个被类库使用的更多。例如,当你拿不定主意用 delete 还是 remove 时,到Javadoc中搜一下,你会发现 remove 的出现次数远比 delete 要多得多,可能仅仅是在物理上删除如文件或数据库中的记录的时候才用delete,一般对变量中内容的删除都使用remove。
总之,把标准的命名规则变成自己的习惯是一件可以受益匪浅的事情。就在我写这条笔记之前的几个小时,我在百度知道上回答了一个网友的提问。且不说问题的具体内容,但看他的命名就有问题:
public static String getDate(String sign,Date date,int day){
如果他真的是要得到一个 String 类型的返回值,这里就不应该使用 getDate 这个名字,这样会产生误会的。
下一章,就要讲到Exception了,这是比较深的一章,最近手上的工作还是比较多的,可能《笔记》会暂停2-3天,一方面是抓紧一下工作,另一方面,也要前后连贯地再好好研习一下《第8章 异常》
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208
分享到:
相关推荐
命名惯例和规范(C#)引用
帮助初学者规范些程序,能够起到编程的效率比较快
...
...
数学建模-公平席位分配问题(比例+惯例法)
软件开发软件编码规范、惯例和约定对于软件开发人员而言尤为重要
程序实现了 用惯例Q值和dhondt 方法分配席位问题,可适用于所有情况
外贸人必看的有关日期的国际惯例
在2002年4月的ICC银行委员会会议上,各国代表对何时、如何修订UCP500未达成一致意见(我国赞成立即开始修订),但一致同意先对产生最多争议的七个条款进行评议。因为ICC提出的专家意见中超过58%集中在UCP500这七个...
《跟单信用证统一惯例中文版》(UCP600).pdf
四制定价格条款及相关国际惯例解读.pptx
Python原来这么简单(win系统 基础篇)
打招呼 很多兄弟不知道怎么和女生聊天总是纠结与第一话怎么说,怎么显现出自己的与众不同。这进入了一个误区。所以一开始就要强调:不在于你说了什么,而在于“你是谁”。 推荐新手的打招呼方法 新手们如果想不到好...
[精选]会计惯例和财务报表的国际比较.pptx
Python编程惯例.md
这篇文章详细的描述了gnu编码标准。这篇文章详细的描述了gnu编码标准。这篇文章详细的描述了gnu编码标准。这篇文章详细的描述了gnu编码标准。这篇文章详细的描述了gnu编码标准。这篇文章详细的描述了gnu编码标准。
第三章 命名惯例 标识符 布尔值 引用变量 数组和散列 下划线 大小写 缩写 模糊的缩写 模糊的名称 实用子程序 第四章 值和表达式 字符串定界符 空字符串 单字符字符串 转义字符 …… 第五章 变量 第六章 控制结构 第...
第三章 命名惯例 标识符 布尔值 引用变量 数组和散列 下划线 大小写 缩写 模糊的缩写 模糊的名称 实用子程序 第四章 值和表达式 字符串定界符 空字符串 单字符字符串 转义字符 …… 第五章 变量 第六章 控制结构 第...
国外房地产惯例.docx
利率期货交易惯例.ppt