
曾经与一位从阿里出来的Java工程师一起工作过一段时间,他的技术说不上非常厉害, 但是,他的代码写的的非常好,凡是他做的功能很少出现Bug 。我就很好奇,于是经常向他请教一些代码设计的原则,然后他告诉了我阿里Java手册。并且,他将这个手册进行了修改,也成为了我司Java程序员的开发手册。 这篇文章就让我们看一看这个手册中比较重要的原则。
【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name / __name / $name / name_ / name$ / name__
【强制】 类型与中括号紧挨相连来表示数组。
正例:定义整形数组 int[] arrayDemo反例:在 main 参数中,使用 String args[]来定义。
【强制】 POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。
说明:表达是与否的值采用 is_xxx 的命名方式,所以,需要在 设置从 is_xxx 到 xxx 的映射关系。
反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC 框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
【推荐】 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
【推荐】 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定 是与接口方法相关,并且是整个应用的基础常量。
正例:接口方法签名 void commit()
接口基础常量 String COMPANY = "alibaba"
反例:接口方法定义 public abstract void f()
说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。
【参考】 枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。
正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。
【参考】 各层命名规约:
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。 3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
【强制】 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
【强制】 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本,直接用类名来访问即可。
【强制】 相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。
说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)
【强制】 所有整型包装类对象之间值的比较,全部使用equals方法比较。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产 生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
关于基本数据类型与包装数据类型的使用标准如下:
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值 ,任何 NPE 问题,或 者入库检查,都由使用者来保证。
正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。
反例: 比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用不成功时, 返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线 。所以包装数据类型的 null 值,能 够表示额外的信息,如:远程调用失败,异常退出。
【强制】 POJO 类必须写 toString 方法。
使用 IDE 中的工具:source>generate toString 时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排查问题。
【强制】 关于hashCode和equals的处理,遵循如下规则:
说明:String 已覆写 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。
【强制】 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
说明:线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问 题。 如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
【强制】 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
以上规范在设计代码中,是比较重要的原则。如果编写代码的过程中,可以依照以上原则,那代码的可读性和可维护性将大大提升
简单列几本:
《JAVA编程思想》夯实基础。这本书算是Java圣经,但是不适合入门,需要有一定的基础。讲述了JAVA的方方面面。需要花力气去啃。啃明白了你会有豁然开朗的感觉。好的基础是后面学习新技术的基石。《重构》好代码是改出来的。马丁福勒的经典书。一步步的告诉你该怎么重构代码。避免你写出面条代码。《EffectiveJava》避免Java中的坑。Java语言本身有很多坑,本书以条目的方式列出了一条条的建议,帮你避免这些坑。《敏捷软件开发:原则、模式与实践》面向对象原理与模式。另一位马丁大叔的书,面向对象设计原理及设计模式的应用。结合GOF的《设计模式》效果更佳《人件》如何进入心流。偏管理的一本书,与《人月神话》不同,本书可以说是从程序员的角度来讲项目管理,讲外部环境对软件开发的影响。其中很多内容深有体会,可以在工作一段时间后来看《Spring实战》JAVA企业开发事实上的标准。这个算是Java程序员的必备技能之一了,不赘述了。《CodeComplete》中文《代码大全》,翻译很有误导性。这是一本软件构建手册,讲了软件构建的完整流程,也建议工作一段时间后再看作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
1、《Java编程思想》在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
2、《Agile Java》中文版这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
二、Java编程进阶类打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
1、《重构 改善既有代码的设计》这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对你产生影响是潜移默化的。
2、《测试驱动开发 by Example》本书最大特点是很薄,看起来没有什么负担。你可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。
还有一些比较基础的入门书籍推荐给你 《Head First java开发》java开发入门书籍《Head First java开发》是本完整的面向对象(object-oriented,OO)程序设计和java开发的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。但如果你真地想要好好地学习java开发,你会需要《Head First java开发》。这本书可是Amazon编辑推荐的十大好书之一!强烈推荐学习此书,非常适合初学者入门。
《java开发从入门到精通》《java开发从入门到精通》这本书主要针对java开发基础,对于没有学过java开发的人才说,是一个不错的选择。通过这本书,大家可以从零开始,慢慢来学习,而且实 *** 很多,不会让你看到最后出现只会理论的情况。
《Thinking in java开发》(中文名:《java开发编程思想》)《java开发编程思想》可以说是最经典的java开发着作,是所有java开发程序员必备教科书。这本书不管是正在学习还是已经工作许多年的程序员,都可以从这本书中得到你想要的东西。这本书具有教材和工具书的作用,就像一本字典,想知道什么都可以从中查询。虽然这本书很好,但并不建议初学者学习,对于初学者难度较大。
《疯狂java开发讲义》《疯狂的讲义》这本书比较适合自学者,内容比较项目化,实 *** 方法很多,如果你想进行java开发的深入学习,不妨看看这本书。
《java开发核心技术》这本书分为两个部分,第一个部分讲的是基础知识,第二个部分讲的是高级特性。由于内容非常有层次,所以非常适合自学的同学学习。
《java开发开发实战经典》这本书比较适合自学者学习,里面有很多小案例,可以边学边练,巩固知识。
PS:温馨提示,光看不练假把式,跟着视频教程练项目也是必不可少的!相关教程指路B站尚学堂官方号!都是免费滴!欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)