java
B站码神之路
这个作者很懒,什么都没留下…
展开
-
Java软件低级错误(八 ):序列化类的多版本问题
解读: Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反转载 2011-08-09 18:31:45 · 1244 阅读 · 0 评论 -
Java软件低级错误(十二):Java的移位(>>和>>>)运算问题
解读 运算符>>指的是对它左边的操作数带符号右移位。我们知道数据的补码表示,如果是负数,那么它的最高位是1,所以右移位操作时左边的空缺用1填补。 运算符>>>也是右移,但它与>>的区别是对于负数,右移不是用1填补,而是用0填补。也就是>>>不考虑数的正负,机械地移转载 2011-08-10 09:22:56 · 1141 阅读 · 0 评论 -
Java软件低级错误(七):Calendar的错误使用
¨解读 Calendar从星期日开始到星期六为一个周期,数字表示依次为:1,2,3……7;MONTH的表示是从数字0开始,所以月份应该是该数字+1。所以我们在使用的时候一定要仔细的阅读API文档,避免类似的陷阱。¨案例 Calendar cal =转载 2011-08-10 09:34:42 · 1934 阅读 · 0 评论 -
Java软件低级错误(六):字符串转数字时未进行异常处理
¨解读 调用Java方法将字符串转换为数字时,如果字符串的格式非法,会抛出运行时异常NumberFormatException。 ¨案例 错误写法 public Integer getInteger1(String number) {转载 2011-08-10 09:36:51 · 9492 阅读 · 0 评论 -
Java软件低级错误(二):常量对象化判断避免空指针异常
¨解读: 空指针异常是编码过程中最常见的异常,在使用一个对象的时候,如果对象可能为空,需要先判断对象是否为空,再使用这个对象。在进行常量和变量的相等判断时,建议将常量定义为Java对象封装类型(如将int类型的常量定义为Integer类型),这样在比较时可以将常量放在左转载 2011-08-11 19:02:02 · 2337 阅读 · 0 评论 -
Java软件低级错误(五):魔鬼数字
¨解读 在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。 将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样转载 2011-08-11 19:03:44 · 8681 阅读 · 0 评论 -
Java软件低级错误(一):资源未及时释放
¨解读: 在使用文件、IO流、数据库连接等不会自动释放的资源时,应该在使用完毕后马上将其关闭。关闭资源的代码try...catch...finally的finally内执行,否则可能造成资源无法释放。案例:FileWriter fileWriter = new转载 2011-08-11 19:05:14 · 4252 阅读 · 0 评论 -
Java软件低级错误(十 四):定义equals方法的同时也要定义hashCode方法
解读: equals方法用于实现对象之间逻辑上是否相等的判断,而不是判断两个引用是否指向同一个对象,hashCode用于返回对象的哈希码(也有翻译成散列码的),逻辑上相等(equals比较相等)的两个不同对象它们返回的hashCode值肯定不相等。 Java规范中规定:如果两转载 2011-08-09 19:22:25 · 1116 阅读 · 0 评论 -
Java软件低级错误(十 五):大小写转换的正确处理
解读: String提供有大小写转换方法:String.toUpperCase()和String.toLowerCase(),另外还有带Locale参数的大小写转换方法:String.toUpperCase(Locale locale)和String.toLowerCase转载 2011-08-09 19:21:39 · 12772 阅读 · 0 评论 -
Java软件低级错误(九 ):Java参数传递:传值还是传引用?
解读: 对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没有改变。 对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员转载 2011-08-09 18:34:48 · 767 阅读 · 0 评论 -
Java软件低级错误(十 三):短路运算和非短路运算的区别
解读: 逻辑与(&&):如果左操作数结果为true,则继续计算右操作数;如果左操作数结果为false,则对右操作数的运算已经没有必要,直接返回结果false,忽略右操作运算。逻辑或(||):如果左操作数结果为false,则继续计算右操作数;如果左操作数结果为true,则对转载 2011-08-09 18:41:03 · 1248 阅读 · 0 评论 -
Java软件低级错误(十 八):忽略InputStream.skip()返回值的处理
解读: java.io.InputStream.skip(long n):跳过和放弃此输入流中的 n 个数据字节,返回的是跳过的实际字节数。如果skip方法的返回值小于要跳过得字节数,则说明有异常发生,此时需要对异常情况进行处理。¨案例: fileInputS转载 2011-08-09 18:51:14 · 8939 阅读 · 1 评论 -
Java软件低级错误(十 一):正确理解Java的浅clone和深clone
解读: 浅clone和深clone都是clone,它们本质区别是对象内部的成员属性(非原生类型属性,如int等)在clone时是否处理为引用。如果仍然保留为引用,则称为浅clone,反之称为深clone。浅clone方式得到clone对象即可,深clone方式在得到clone转载 2011-08-09 18:59:41 · 1229 阅读 · 0 评论 -
Java软件低级错误(十 ):正确定义hashcode
解读: 类A覆写了hashCode方法,并采用A的属性value来生成A的hashCode。使用HashSet作为集合对象,把类A的一个对象a加入到HashSet中后,如果对象a的属性value发生了变化,则a的hashCode()方法返回的值也就发生变化,则无法将对象a从H转载 2011-08-09 18:20:05 · 855 阅读 · 0 评论 -
Java软件低级错误(十 七):对于Map元素的遍历使用entrySet还是KeySet?
解读: JDK实现的数据结构中常用的Map有两类:HashMap和TreeMap。keySet和entrySet在Map元素数较少时(小于10000)在查询速度上的区别不大,它们对于程序性能的影响可以忽略不计。但在元素较多时(大于100000)时entrySet的速度要明显快转载 2011-08-09 18:55:08 · 3178 阅读 · 0 评论 -
Java软件低级错误(十 六):使用包装器对象带来的低效问题
解读: 每个基本类型(primitive)都有相应的包装器(wrapper)对象:Integer、Long、Float、Double、Short、Byte、Character和Boolean,我们在使用时不要直接new Integer对象(这样的做法是低效的),而应该调用包装转载 2011-08-09 18:55:51 · 1101 阅读 · 0 评论 -
Java软件低级错误(十 九):静态变量的初始化问题
解读: 类的一个静态变量已经初始化,在构造函数中进行了重新赋值,但结果显示构造函数中的赋值没有生效。因为编译器是按照顺序将静态对象、静态变量搬到初始化语句块中的,而静态对象的初始化调用了构造方法,在构造方法中先改变了静态变量的值,下面再初始化静态变量时将其值复原了。案例:转载 2011-08-09 18:58:55 · 1549 阅读 · 0 评论 -
Java软件低级错误(二十 ):正确理解String/StringBuffer/StringBuilder的性能区别
解读: StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。 StringBuilder提供一个与StringBuffer兼容的API,该类被设计用作 StringBu转载 2011-08-09 19:16:02 · 1848 阅读 · 0 评论