
Java提高
文章平均质量分 70
1024工场
新技术,新未来,1024工场...
展开
-
提高你的Java代码质量吧:警惕数组的浅拷贝
一、分析 在日常工作中,我们会遇见很多数组的拷贝和复制的问题,但是在你使用系统提供的API进行编码的时候,无形中会留下浅拷贝的隐患。 二、场景 有这样一个例子,第一个箱子里面与赤橙黄绿青蓝紫7色气球,现在希望第二个箱子也放入7个气球,其中最后一个气球改为蓝色,也就是赤橙黄绿青蓝蓝七个气球。 来看实现: public class原创 2013-08-12 09:21:04 · 2752 阅读 · 1 评论 -
提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
一、分析 字符串的操作,诸如追加、合并、替换、倒序、分隔等,都是在编码过程中经常用到的,而且Java也提供了append、replace、reverse、split等方法来完成这些操作,它们使用起来确实方便,但是更多的时候,需要使用正则表达式来完成复杂的处理。 二、场景 统计一篇文章中的单词的数量,代码如下: public static v原创 2013-08-05 09:36:17 · 2776 阅读 · 1 评论 -
提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择
一、分析 对于一个字符串进行拼接有三种方法:加号、concat方法、及StringBuiler或StringBuffer。 1."+"方法拼接字符串 str += "c";等效于:str = new StringBuffer(str).append("c").toString(); 虽然编译器对字符串加号做了优化,它会用S原创 2013-07-29 15:55:43 · 4625 阅读 · 2 评论 -
提高你的Java代码质量吧:强烈建议使用UTF编码
一、分析 Java的乱码问题由来已久,有点开发经验的开发人员肯定遇到过乱码问题,有时从Web上接受乱码,有时是从数据库中读取乱码,有时是从外部接口中接收到的乱码。 先解释一下Java中的编码规则。Java程序涉及的编码包括两个部分: 1.Java文件编码 如果我们使用记事本创建一个.java后缀的文件,则文件的编码格式就是操作系统默认的格式原创 2013-08-06 09:30:11 · 3443 阅读 · 1 评论 -
提高你的Java代码质量吧:性能考虑,数组是首选
一、分析 数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合使用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合的底层也是通过数组实现。 二、场景 比如对一个数据集求和的计算: //对数组求和 public static int su原创 2013-08-08 09:13:29 · 3918 阅读 · 1 评论 -
提高你的Java代码质量吧:多种最值算法,适时选择
一、分析 对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构的知识。在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现。 二、场景 1.自行实现,快速查找最大值,代码如下: public static int max(int[] data){ int max = data[0];原创 2013-08-14 09:20:36 · 4692 阅读 · 2 评论 -
提高你的Java代码质量吧:中文字符串排序的瑕疵
一、分析 在Java中一设计中文处理就会冒出很多问题来,其中排序也是一个让人头疼的课题。 我们知道Arrays工具类的默认排序是通过数组元素的compareTo方法来进行比较的,那我们来看String类的compareTo方法的主要实现: while(k < lim){ //原字符串的字符数组 char c1 = v1[k];原创 2013-08-07 09:10:34 · 6531 阅读 · 2 评论 -
提高你的Java代码质量吧:避免基本类型数组转换列表陷阱(Arrays.asList())
一、分析 我们在开发的过程中经常会使用Arrays和Collections这两个工具类在数组和列表之间转换。 Arrays.asList()方法:输入一个变长参数,返回一个固定长度的列表。看源码: public static List asList(T... a){ return new ArrayList(a); } asList方法输入的原创 2013-08-20 09:07:22 · 4298 阅读 · 1 评论 -
提高你的Java代码质量吧:在switch的default代码块中增加AssertionError错误
一、分析 switch后跟枚举类型,case后列出所有的枚举项,这是一个使用枚举的主流写法,那留着default语句没有任何作用,程序已经列举了所有的可能选项,肯定不会执行到default语句,看上去纯属多余! 二、场景 错了!这个default还是很有用的,以我们定义日志级别来举例说明,这是一个典型的枚举常量,如下所示: enum Log原创 2013-09-03 09:19:04 · 4222 阅读 · 1 评论 -
提高你的Java代码质量吧:推荐使用枚举定义常量
一、分析 常量的声明是每一个项目中不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量。不过,在1.5版之后有了改进,即新增了一种常量声明方式,枚举常量。代码如下: enum Season{ Spring,Summer,Autumn,Winter; } 二、场景 那么枚举常量与我们的经常使用的类常量和原创 2013-09-10 09:18:59 · 21915 阅读 · 3 评论 -
提高你的Java代码质量吧:小心switch带来的空值异常
一、分析 使用枚举定义常量时,会有伴有大量的switch语句判断,目的是为每个枚举解释其行为。 我们知道,目前的Java的switch语句只能判断byte、short、char、int类型(JDK7已经允许使用string类型),为什么枚举也能跟在switch后面呢?很简单,因为编译的时候,编译器判断出switch后面的参数是枚举类型,然后就会根据枚举的排序值继续匹配。如下原创 2013-09-06 09:49:41 · 12238 阅读 · 1 评论 -
提高你的Java代码质量吧:使用构造函数协助描述枚举项
一、分析 一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0、1、2... ...。但是除了排序号外,枚举还有一个(或多个)属性。 二、场景 比如,可以通过枚举构造函数声明业务值,定义可选项,添加属性,看如下代码: enum Role{ Admin("管理员",new Lifetim原创 2013-09-11 08:42:48 · 2491 阅读 · 0 评论 -
提高你的Java代码质量吧:使用valueof前必须进行校验
一、分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode、name、valueOf等,其中valueOf方法会把一个String类型的名称转变成枚举项,也就是在枚举项中查找字面值和该参数相等的枚举项。 我们来深入分析一下该valueOf方法的源代码: public static > T val原创 2013-09-13 09:20:30 · 21792 阅读 · 1 评论 -
提高你的Java代码质量吧:注意@ Override不同版本的区别
一、分析 @Override注解用于方法的覆写上,它在编译期有效,也就是Java编译器在编译时会根据该注解检查是否真的是覆写,如果不是就报错,拒绝编译。 该注解很大程度解决我们的误写问题,比如子类和父类的方法名少写一个字符,或者是数字0和字母O未区分出来等,这基本上是每个程序员都曾犯过的错误。在代码中加上@Override注解基本上可以杜绝出现此类问题。原创 2013-09-16 10:50:22 · 5748 阅读 · 6 评论 -
Java提高:提倡异常封装
一、分析 Java语言的异常处理机制可以确保程序的健壮性,提高系统的开发效率,但是Java API提供的异常都是比较低级(这里的低级指的是“低级别的异常”),只有开发人员才能看的懂,才明白发生了什么问题。对于终端用户来说,这些异常基本上是天书,与业务无关,是纯计算机语言的描述。 这就需要我们对异常进行封装了。 二、场景 异常封装有三方原创 2013-09-18 09:26:32 · 10751 阅读 · 8 评论 -
Java提高:受检异常尽可能转化为非受检异常
一、分析“把所有受检查异常(Checked Exception)都转化为非受检查异常(UnChecked Exception)”这一想法是不现实的。受检查异常是正常逻辑的一种补偿处理手段,特别是对可靠性要求比较高的系统来说,在某些条件下必须抛出首检异常以便由程序进行补偿处理,也就说受检异常又合理的存在理由,那为什么需要把受检异常转化为非受检异常?受检异常确实有不足的地方:1.受检异常使原创 2013-09-23 01:21:35 · 5540 阅读 · 4 评论 -
Java提高:不要在finally块中处理返回值
一、分析在finally中处理return返回值,代码上看上去很完美,都符合逻辑,但是执行起来就会产生逻辑错误,最重要的一点是finally是用来做异常处理的收尾处理的,一旦加上return语句,就会让程序的复杂程度陡然提升,而且会在一些隐蔽性非常高的错误。与return语句相似,System.exit(0)或Runtime.getRuntime().exit(0)出现在异常代码块中也原创 2013-09-27 09:31:20 · 6965 阅读 · 8 评论 -
提高你的Java代码质量吧:字符拼接位置的玄机
一、分析 Java对加号的处理机制:在使用加号进行计算的表达式中,只要遇到String字符串,则所有的数据都会转换为String类型进行拼接,如果是原始数据,则直接拼接,如果是对象,则调用toString方法的返回值拼接。 二、场景 看这样一段程序: public static void main(String[] args){原创 2013-07-26 09:18:12 · 2630 阅读 · 1 评论 -
提高你的Java代码质量吧:不要随便设置随机种子
一、分析 在加密、混淆数据等地方,我们经常期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。 在Java项目中,通常是通过Math.random方法和Random类类获得随机数的。这两种方式获取随机数的原理是相同的,Math.random方法也是通过生成一个Random类的实例,然后委托newxDouble方法,没有差别。原创 2013-07-25 10:27:19 · 7035 阅读 · 2 评论 -
提高你的Java代码质量吧:优先使用整形池
一、分析 包装类型产生对象的两种方式: 1.new产生的Integer对象 new声明的就是要生成一个对象,没二话,这就是两个对象,地址肯定不相等。 2.装箱生成的对象 装箱动作是通过valueOf()方法实现的,我们阅读以下Integer.valueOf的实现代码: public static Integer valueOf(i原创 2013-07-24 19:04:16 · 2732 阅读 · 2 评论 -
提高你的Java代码质量吧:不同的列表应该选择不同的遍历方法
一、分析 在Java中,RandomAccess和Cloneable、Serializable一样都是标识接口,不需要任何实现,只是用来表明其实现类具有某种特质的,实现了Cloneable表明可以被拷贝,实现了Serializable接口表明被序列化了,实现了RandomAccess则表明这个类可以随机存取。 ArrayList数组实现了RandomAccess接原创 2013-08-26 09:18:30 · 4546 阅读 · 4 评论 -
提高你的Java代码质量吧:频繁插入和删除时使用LinkedList
一、分析 前面有文章分析了列表的表里方式,也就是“读”的操作。本文将介绍表的“写”操作:即插入、删除、修改动作。 二、场景 1.插入元素 列表中我们使用最多的是ArrayList,下面看看他的插入(add方法)算法,源代码如下: public void add(int index,E element){ /*检查下标是原创 2013-08-27 09:18:26 · 6983 阅读 · 1 评论 -
Java提高:不要主动进行垃圾回收
一、建议 不要调用system.gc,即使经常出现内存溢出也不要调用,内存溢出是可分析的,是可以查找原因的,GC可不是一个好招数。 二、分析 System.gc主动进行垃圾回收时一个非常危险的动作。因为它要停止所有的响应,才能检查内存中是否有可回收的对象,这对一个应用系统风险极大。 三、原创 2013-06-25 10:06:03 · 9283 阅读 · 10 评论 -
Java提高:推荐使用String直接量赋值
一、分析 Java为了避免在一个系统中大量产生String对象,于是就设计了一个字符串池(也有叫做字符串常量池),在字符串池中所容纳的都是String字符串对象。 String创建规则:创建一个字符串时,首先没有检查池中是否有字面值相等的字符串。 如果有,则不再创建,直接返回池中该对象的引用。 如果没有则创建之,然后放到池中,并返回新建对象的引用。原创 2013-07-02 09:21:02 · 5415 阅读 · 7 评论 -
Java提高:你能正确使用String、StringBuffer、StringBuilder吗
一、建议 CharSequence接口有三个实现类与字符串相关:String、StringBuffer、StringBuilder,虽然它们都与字符串相关,但是其处理机制不同。 根据不同的场景,建议使用不同的字符序列: 1.使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。 2.使用StringBuf原创 2013-07-09 09:33:11 · 5725 阅读 · 3 评论 -
Java提高:静态导入给你带来的麻烦
一、分析 从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序。 但是,滥用静态导入会使程序更难阅读,更难维护。静态导入后,代码中就不用再写类名了,但是我们知道类是“一类事物的描述”,缺少了类名的修饰,静态属性和静态方法的表象意义就会被无限方法,这会让阅读者很难弄清楚其属性或方法代表何以,甚至是哪一原创 2013-07-11 10:18:46 · 8512 阅读 · 3 评论 -
提高你的Java代码质量吧:不要在常量和变量中出现易混淆的字母
一、建议 包名全小写、类名首字母大写,常量全部大写并用下划线分隔,变量采用驼峰命名等。这些是基本的Java编码规范。 在变量的声明中要注意不要引入容易混淆的字母。 二、分析 为了让你的程序更容易理解,字母“l"(还包括大写的字母”O")尽量不要和数字混用,以免读者意图产生偏差。如果字母和数字必须混合使用,字母"l"务必大写,字母“O”则增加注释。原创 2013-07-10 13:29:19 · 3549 阅读 · 2 评论 -
提高你的Java代码质量吧:break万万不能忘
一、分析 switch-case语句,如果在每个case语句后面少加了break关键字。程序从该case分支继续执行下一个分支,直到遇见break后或执行完最后一个分支,switch语句执行结束。 二、场景 如此段代码:public class Client{ public static void main(String[] args){原创 2013-07-12 09:45:07 · 3522 阅读 · 2 评论 -
Java提高:采用异常链传递异常
一、分析 异常需要封装,但是仅仅封装还是不够的,还需要传递异常。一个系统的友好型的标识,友好的界面功能是一方面,另一方面就是系统出现非预期的情况的处理方式了。二、场景 比如我们的JEE项目一般都又三层:持久层、逻辑层、展现层,持久层负责与数据库交互,逻辑层负责业务逻辑的实现,展现层负责UI数据的处理。 又这样一个模块:用户第一次访问原创 2013-09-22 09:40:25 · 10724 阅读 · 9 评论 -
提高你的Java代码质量吧:三元操作符的类型陷阱
一、分析 当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则: 1.若果两个操作数不可转换,则不做转换,返回值为Object类型。 2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。 3.若两个操作数中有一个是数字S,另外一个是表达式,原创 2013-07-15 10:15:22 · 13982 阅读 · 4 评论 -
提高你的Java代码质量吧:用整数类型处理货币
一、分析 在计算机中,使用二进制表示数据,浮点数有可能是不准确的,它只能无限接近准确值,而不是完全精确。 如:0.4这个十进制小数,使用“乘2取整,顺序排列”法: 0.4*2=0.8 ---> 取整是0 0.8*2=1.6 ---> 取整是1 0.6*2=1.2 ---> 取整是1 0.2*2=0.4 --原创 2013-07-16 11:15:52 · 3495 阅读 · 1 评论 -
提高你的Java代码质量吧:不要让类型默默转换
一、分析 在Java运算中的类型转换,是先运算在进行类型转换的。具体场景如下。二、场景 在如下程序中: public class Client{ public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] arg原创 2013-07-17 09:44:17 · 3073 阅读 · 1 评论 -
提高你的Java代码质量吧:危险的边界
一、分析 在单元测试中,有一项测试叫做边界测试(也有叫做临界测试),它能避免出现:数字越界使检验条件失效。 如果一个方法接受的是Int类型的参数,那一些三个值是必须的:0、正最大、负最大、其中正最大和负最大是边界值,如果这三个值都没有问题,方法才是比较安全可靠的。 二、场景 某生产的电子产品非常畅销,需要提前30天预订才能抢到手,同时它还规定了一个会员可原创 2013-07-18 10:21:38 · 4405 阅读 · 4 评论 -
提高你的Java代码质量吧:提防包装类型的null值
一、分析 Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便一个基本类型也能参与到面向对象的编程世界中。 而在Java5中泛型更是对基本类型说了“不”,如果想把一个整形放到List中,就必须使用Integer包装类型。 基本类型和包装类型都是可以通过自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)自由转换的原创 2013-07-22 09:54:16 · 4780 阅读 · 1 评论 -
提高你的Java代码质量吧:不容忽视的四舍五入细节
一、分析 在许多数学计算的场景中,会用到近似取值的计算方法。常用的近似取值有四舍五入。 但是在某些金融行业或特殊场景中,四舍五入的方式就不太适宜。目前Java支持一下其中舍入方式: ROUND_UP:远离零方向舍入,向远离0的方向舍入,也就是说,向绝对值最大的方向舍入,只要舍弃位非0即进位。 ROUND_DOWN:趋向零方向的舍入,向0方向靠拢,也就是说,向原创 2013-07-19 10:45:03 · 7891 阅读 · 5 评论 -
提高你的Java代码质量吧:谨慎包装类型的比较
一、分析 基本类型可以比较大小,其所对应的包装类型都实现了Comparable接口此问题。 二、场景 代码如下: public class Client{ public static void main(String[] args){ Integer i = new Integer(100); Inte原创 2013-07-23 18:50:22 · 2658 阅读 · 1 评论 -
Java提高:多使用异常,把性能问题放一边
一、分析Java异常处理机制确实比较慢,这个“比较慢”是相对于诸如String、Integer等对象来说,单单从对象的创建上来说,new一个IOException会比String慢5倍,这从异常的处理机制上也可以解释:因为它执行fillStackTrace方法,要记录当前栈的快照,而String类则是直接申请创建一个内存创建对象,异常类慢一筹也在所难免。 二、场景原创 2013-09-28 09:37:25 · 7480 阅读 · 12 评论