随笔分类 -  编写高质量代码 改善java程序的151个建议

编写高质量代码 改善java程序的151个建议。
摘要:建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系,但是Java为了简化并行计算,还提供了一个Exceutors的静态类,它可以直接生成多种不同的线程 阅读全文
posted @ 2016-10-19 16:39 阿赫瓦里 阅读(3032) 评论(4) 推荐(7)
摘要:建议122:使用线程异常处理器提升系统可靠性 我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一个是避免线程阻塞,保证接收的数据尽快处理;二是:接口的稳定性和可靠性问题,数据包很复杂,接口服务的系统也很多 阅读全文
posted @ 2016-10-18 17:29 阿赫瓦里 阅读(1766) 评论(4) 推荐(10)
摘要:多线程技术可以更好地利用系统资源,减少用户的响应时间,提高系统的性能和效率,但同时也增加了系统的复杂性和运维难度,特别是在高并发、大压力、高可靠性的项目中。线程资源的同步、抢占、互斥都需要慎重考虑,以避免产生性能损耗和线程死锁。 建议118:不推荐覆写start方法 多线程比较简单的实现方式是继承T 阅读全文
posted @ 2016-10-18 10:32 阿赫瓦里 阅读(1913) 评论(2) 推荐(3)
摘要:建议114:不要在构造函数中抛出异常 Java异常的机制有三种: Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等。 RunTimeException类及其子类表示的是非受检异常,是系统可能 阅读全文
posted @ 2016-10-14 09:56 阿赫瓦里 阅读(2234) 评论(0) 推荐(7)
摘要:不管人类的思维有多么缜密,也存在" 智者千虑必有一失 "的缺憾。无论计算机技术怎么发展,也不可能穷尽所有的场景___这个世界是不完美的,也是有缺陷的。完美的世界只存在于理想中。 对于软件帝国的缔造者来说,程序也是不完美的,异常情况会随时出现,我们需要它为我们描述例外事件,需要它处理非预期的情景,需要 阅读全文
posted @ 2016-10-12 10:24 阿赫瓦里 阅读(1910) 评论(1) 推荐(5)
摘要:建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发。我们知道一个静态代理是通过主题角色(Proxy)和具体主题角色(Real Subject)共同实现主题角色(Subject)的逻辑的,只是代理角 阅读全文
posted @ 2016-10-10 12:43 阿赫瓦里 阅读(2018) 评论(3) 推荐(16)
摘要:建议102:适时选择getDeclaredXXX和getXXX Java的Class类提供了很多的getDeclaredXXX方法和getXXX方法,例如getDeclaredMethod和getMethod成对出现,getDeclaredConstructors和getConstructors也是 阅读全文
posted @ 2016-10-09 13:23 阿赫瓦里 阅读(1748) 评论(3) 推荐(13)
摘要:建议98:建议的采用顺序是List中泛型顺序依次为T、?、Object List<T>、List<?>、List<Object>这三者都可以容纳所有的对象,但使用的顺序应该是首选List<T>,次之List<?>,最后选择List<Object>,原因如下: (1)、List<T>是确定的某一个类型 阅读全文
posted @ 2016-10-08 17:32 阿赫瓦里 阅读(1703) 评论(3) 推荐(4)
摘要:泛型可以减少强制类型的转换,可以规范集合的元素类型,还可以提高代码的安全性和可读性,正式因为有这些优点,自从Java引入泛型后,项目的编码规则上便多了一条:优先使用泛型。 反射可以“看透” 程序的运行情况,可以让我们在运行期知晓一个类或实例的运行状况,可以动态的加载和调用,虽然有一定的性能忧患,但它 阅读全文
posted @ 2016-09-30 10:30 阿赫瓦里 阅读(1884) 评论(0) 推荐(9)
摘要:建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类"。工厂方法模式在我们的开发中经常会用到。下面以汽车制造为例,看看一般的工厂方法模式是如何实现的,代码如下: 这是最原始 阅读全文
posted @ 2016-09-28 10:53 阿赫瓦里 阅读(2478) 评论(1) 推荐(5)
摘要:枚举和注解都是在Java1.5中引入的,虽然它们是后起之秀,但其功效不可小觑,枚举改变了常量的声明方式,注解耦合了数据和代码。 建议83:推荐使用枚举定义常量 常量声明是每一个项目都不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量,若在项目中使用的是Java1.5之前的版本 阅读全文
posted @ 2016-09-26 09:52 阿赫瓦里 阅读(3737) 评论(3) 推荐(6)
摘要:建议79:集合中的哈希码不要重复 在一个列表中查找某值是非常耗费资源的,随机存取的列表是遍历查找,顺序存储的列表是链表查找,或者是Collections的二分法查找,但这都不够快,毕竟都是遍历嘛,最快的还要数以Hash开头的集合(如HashMap、HashSet等类)查找,我们以HashMap为例, 阅读全文
posted @ 2016-09-24 09:52 阿赫瓦里 阅读(1701) 评论(3) 推荐(4)
摘要:建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法有关系吗?有关系,在compareTo的返回为0时,它表示的是 进行比较的两个元素时相等的。equa 阅读全文
posted @ 2016-09-23 10:45 阿赫瓦里 阅读(1716) 评论(2) 推荐(6)
摘要:建议70:子列表只是原列表的一个视图 List接口提供了subList方法,其作用是返回一个列表的子列表,这与String类subSting有点类似,但它们的功能是否相同呢?我们来看如下代码: c1是通过ArrayList的构造函数创建的,c2是通过列表的subList方法创建的,然后c2又增加了一 阅读全文
posted @ 2016-09-21 18:29 阿赫瓦里 阅读(1678) 评论(2) 推荐(5)
摘要:建议65:避开基本类型数组转换列表陷阱 我们在开发中经常会使用Arrays和Collections这两个工具类和列表之间转换,非常方便,但也有时候会出现一些奇怪的问题,来看如下代码: 也许你会说,这很简单,list变量的元素数量当然是5了。但是运行后打印出来的列表数量为1。 事实上data确实是一个 阅读全文
posted @ 2016-09-20 15:04 阿赫瓦里 阅读(2338) 评论(2) 推荐(13)
摘要:噢,它明白了,河水既没有牛伯伯说的那么浅,也没有小松鼠说的那么深,只有亲自试过才知道。 寓言故事《小马过河》 数据处理是每种语言必备的功能,Java更甚之,数据集可以允许重复,也可以不允许重复,可以允许null存在,也可以不允许null存在,可以自动排序,也可以不自动排序,可以是阻塞式的,也可以是非 阅读全文
posted @ 2016-09-19 11:26 阿赫瓦里 阅读(2604) 评论(1) 推荐(5)
摘要:建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号、concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuilder相同,不在赘述)的append方法,其中加号是最常用的,其它两种方式偶尔会出现在一些开源项目中 阅读全文
posted @ 2016-09-18 14:09 阿赫瓦里 阅读(2214) 评论(3) 推荐(4)
摘要:建议52:推荐使用String直接量赋值 一般对象都是通过new关键字生成的,但是String还有第二种生成方式,也就是我们经常使用的直接声明方式,这种方式是极力推荐的,但不建议使用new String("A")的方式赋值。为什么呢?我们看如下代码: 注意看上面的程序,我们使用"=="判断的是两个对 阅读全文
posted @ 2016-09-17 22:33 阿赫瓦里 阅读(1946) 评论(0) 推荐(8)
摘要:建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBean中继承也很多见,代码如下: 员工类增加了工号ID属性,同时也覆写了equals方法,只有在姓名和 阅读全文
posted @ 2016-09-15 09:22 阿赫瓦里 阅读(1740) 评论(2) 推荐(4)
摘要:建议41:让多重继承成为现实 在Java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不 能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有多个类的行为功能,就很难使用单继承来解决问题了(当然,使用多继承是可以解决的)。幸 运的是Java中提供的内部类可以曲 阅读全文
posted @ 2016-09-14 08:46 阿赫瓦里 阅读(2410) 评论(3) 推荐(11)