编写高质量代码 改善java程序的151个建议。

摘要: 建议98:建议的采用顺序是List<T>、List<?>、List<Object> List<T>、List<?>、List<Object>这三者都可以容纳所有的对象,但使用的顺序应该是首选List<T>,次之List<?>,最后选择List<Object>,原因如下: (1)、List<T>是确定阅读全文
posted @ 2016-10-08 17:32 阿赫瓦里 阅读(180) | 评论 (1) 编辑
摘要: 泛型可以减少强制类型的转换,可以规范集合的元素类型,还可以提高代码的安全性和可读性,正式因为有这些优点,自从Java引入泛型后,项目的编码规则上便多了一条:优先使用泛型。 反射可以“看透” 程序的运行情况,可以让我们在运行期知晓一个类或实例的运行状况,可以动态的加载和调用,虽然有一定的性能忧患,但它阅读全文
posted @ 2016-09-30 10:30 阿赫瓦里 阅读(404) | 评论 (0) 编辑
摘要: 建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类"。工厂方法模式在我们的开发中经常会用到。下面以汽车制造为例,看看一般的工厂方法模式是如何实现的,代码如下: 这是最原始阅读全文
posted @ 2016-09-28 10:53 阿赫瓦里 阅读(480) | 评论 (1) 编辑
摘要: 枚举和注解都是在Java1.5中引入的,虽然它们是后起之秀,但其功效不可小觑,枚举改变了常量的声明方式,注解耦合了数据和代码。 建议83:推荐使用枚举定义常量 常量声明是每一个项目都不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量,若在项目中使用的是Java1.5之前的版本阅读全文
posted @ 2016-09-26 09:52 阿赫瓦里 阅读(596) | 评论 (3) 编辑
摘要: 建议79:集合中的哈希码不要重复 在一个列表中查找某值是非常耗费资源的,随机存取的列表是遍历查找,顺序存储的列表是链表查找,或者是Collections的二分法查找,但这都不够快,毕竟都是遍历嘛,最快的还要数以Hash开头的集合(如HashMap、HashSet等类)查找,我们以HashMap为例,阅读全文
posted @ 2016-09-24 09:52 阿赫瓦里 阅读(304) | 评论 (1) 编辑
摘要: 建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法有关系吗?有关系,在compareTo的返回为0时,它表示的是 进行比较的两个元素时相等的。equa阅读全文
posted @ 2016-09-23 10:45 阿赫瓦里 阅读(314) | 评论 (2) 编辑
摘要: 建议70:子列表只是原列表的一个视图 List接口提供了subList方法,其作用是返回一个列表的子列表,这与String类subSting有点类似,但它们的功能是否相同呢?我们来看如下代码: c1是通过ArrayList的构造函数创建的,c2是通过列表的subList方法创建的,然后c2又增加了一阅读全文
posted @ 2016-09-21 18:29 阿赫瓦里 阅读(352) | 评论 (2) 编辑
摘要: 建议65:避开基本类型数组转换列表陷阱 我们在开发中经常会使用Arrays和Collections这两个工具类和列表之间转换,非常方便,但也有时候会出现一些奇怪的问题,来看如下代码: 也许你会说,这很简单,list变量的元素数量当然是5了。但是运行后打印出来的列表数量为1。 事实上data确实是一个阅读全文
posted @ 2016-09-20 15:04 阿赫瓦里 阅读(495) | 评论 (0) 编辑
摘要: 噢,它明白了,河水既没有牛伯伯说的那么浅,也没有小松鼠说的那么深,只有亲自试过才知道。 寓言故事《小马过河》 数据处理是每种语言必备的功能,Java更甚之,数据集可以允许重复,也可以不允许重复,可以允许null存在,也可以不允许null存在,可以自动排序,也可以不自动排序,可以是阻塞式的,也可以是非阅读全文
posted @ 2016-09-19 11:26 阿赫瓦里 阅读(444) | 评论 (0) 编辑
摘要: 建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号、concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuilder相同,不在赘述)的append方法,其中加号是最常用的,其它两种方式偶尔会出现在一些开源项目中阅读全文
posted @ 2016-09-18 14:09 阿赫瓦里 阅读(492) | 评论 (2) 编辑
摘要: 建议52:推荐使用String直接量赋值 一般对象都是通过new关键字生成的,但是String还有第二种生成方式,也就是我们经常使用的直接声明方式,这种方式是极力推荐的,但不建议使用new String("A")的方式赋值。为什么呢?我们看如下代码: 注意看上面的程序,我们使用"=="判断的是两个对阅读全文
posted @ 2016-09-17 22:33 阿赫瓦里 阅读(485) | 评论 (0) 编辑
摘要: 建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBean中继承也很多见,代码如下: 员工类增加了工号ID属性,同时也覆写了equals方法,只有在姓名和阅读全文
posted @ 2016-09-15 09:22 阿赫瓦里 阅读(457) | 评论 (2) 编辑
摘要: 建议41:让多重继承成为现实 在Java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不 能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有多个类的行为功能,就很难使用单继承来解决问题了(当然,使用多继承是可以解决的)。幸 运的是Java中提供的内部类可以曲阅读全文
posted @ 2016-09-14 08:46 阿赫瓦里 阅读(707) | 评论 (0) 编辑
摘要: 建议36:使用构造代码块精简程序 什么叫做代码块(Code Block)?用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合即为代码块,一般来说代码快不能单独运行的,必须要有运行主体。在Java中一共有四种类型的代码块: 我么知道一个类中至少有一个构造函数(如果没有,编译器会阅读全文
posted @ 2016-09-13 22:55 阿赫瓦里 阅读(381) | 评论 (0) 编辑
摘要: 书读的多而不思考,你会觉得自己知道的很多。 书读的多而思考,你会觉得自己不懂的越来越多。 ———伏尔泰 在面向对象编程(Object-Oriented Programming, OOP)的世界里,类和对象是真实世界的描述工具,方法是行为和动作的展示形式,封装、继承、多态则是其多姿多彩的主要实现方式,阅读全文
posted @ 2016-09-13 09:35 阿赫瓦里 阅读(701) | 评论 (4) 编辑
摘要: 建议26:提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中。而在Java5中泛型更是对基本类型说了"不",如果把一个整型放入List中,就必须使用Integer包装类型。我们看一段代码阅读全文
posted @ 2016-09-12 21:51 阿赫瓦里 阅读(467) | 评论 (4) 编辑
摘要: 不积跬步,无以至千里; 不积小流,无以成江海。 ———荀子《劝学篇》 建议21:用偶判断,不用奇判断 判断一个数是奇数还是偶数是小学里的基本知识,能够被2整除的整数是偶数,不能被2整除的数是奇数,这规则简单明了,还有什么可考虑的?好,我们来看一个例子,代码如下: 输入多个数字,然后判断每个数字的奇偶阅读全文
posted @ 2016-09-12 09:55 阿赫瓦里 阅读(961) | 评论 (12) 编辑
摘要: 建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy、Javascript等,这些入侵者都有一个共同特征:全是同一类语言 脚本语言,它们都是在运行期解释执行的。为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如阅读全文
posted @ 2016-09-11 09:37 阿赫瓦里 阅读(402) | 评论 (0) 编辑
摘要: 建议11:养成良好习惯,显示声明UID 我们编写一个实现了Serializable接口(序列化标志接口)的类,Eclipse马上就会给一个黄色警告:需要添加一个Serial Version ID。为什么要增加?他是怎么计算出来的?有什么用?下面就来解释该问题。 类实现Serializable接口的目阅读全文
posted @ 2016-09-10 09:13 阿赫瓦里 阅读(793) | 评论 (0) 编辑
摘要: 建议6:覆写变长方法也循规蹈矩 在JAVA中,子类覆写父类的中的方法很常见,这样做既可以修正bug,也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle)。 符合开闭原则(Open-Closed Principle)的主要特征: 1.对于扩展是开放的(Open阅读全文
posted @ 2016-09-09 09:35 阿赫瓦里 阅读(1002) | 评论 (5) 编辑
摘要: The reasonable man adapts himself to the world; The unreasonable one persists in trying to adapt the world himself. 明白事理的人使自己适应世界;不明事理的人想让世界适应自己。 萧伯纳 阅读全文
posted @ 2016-09-08 11:01 阿赫瓦里 阅读(1523) | 评论 (6) 编辑
原文地址:https://www.cnblogs.com/smallfa/p/5940852.html