养成良好的编程习惯,提高代码质量
上一篇 / 下一篇 2013-03-21 11:35:50 / 个人分类:其他
“不积跬步,无以至千里,不积小流,无以成江海”,程序员如何提高代码质量?我们不仅要知其然,还要知其所以然,我们要从点点滴滴的积累开始的。这篇帖子里记录了编程时的应该注意的一些细节,如有需要后续还会补充,希望通过不断的积累,提高编程质量。
可序列化接口Serializable
类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布或异步部署提供先决支持条件。若没有序列化,现在我们熟悉的远程调用,对象数据库都不可能存在。
序列化和反序列化是对应的,以下用代码描述实现了序列化接口Serializable的类在磁盘上的存储过程及反序列化,其在网络上的传输道理也是一样的。
- package org.iti.wxl.serializable;
- import java.io.Serializable;
- /**
- * 实现了Serializable的实体类
- *
- */
- public class Person implements Serializable{
- private static final long serialVersionUID = 6388172609871883630L;
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
为模拟序列化的过程我们创建序列化工具类,如下:
- package org.iti.wxl.serializable;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInput;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- public class SerializableUtils {
- private static String FILE_NAME="e:/obj.bin";
- //序列化数据保存到磁盘
- public static void writeObject(Serializable s){
- try {
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME));
- oos.writeObject(s);
- oos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //反序列化从磁盘读取数据
- public static Object readObject(){
- Object obj = null;
- try {
- ObjectInput input = new ObjectInputStream(new FileInputStream(FILE_NAME));
- obj = input.readObject();
- input.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return obj;
- }
- }
序列化保存数据到磁盘上
- package org.iti.wxl.serializable;
- public class Producer {
- public static void main(String[] args) {
- Person p = new Person();
- p.setName("小明");
- // 序列化保存到磁盘上
- SerializableUtils.writeObject(p);
- }
- }
反序列化,从磁盘读取数据:
- package org.iti.wxl.serializable;
- public class Consumer {
- public static void main(String[] args) {
- //反序列化
- Person p =(Person)SerializableUtils.readObject();
- System.out.println(p.getName());
- }
- }
在反序列化时,若类的版本号serialVersionUID不一致,反序列化时会报一个InvalidClassexception异常,另外在反序列化时,类中的构造函数不会执行。
奇偶校验用偶校验,避免使用奇校验
JDK提供的奇偶校验代码模拟如下:
- public class Remainder {
- //dividend被除数,divisor除数
- public static int remainder(int dividend, int divisor) {
- return dividend - dividend/divisor*divisor;
- }
- }
当使用取模运算“%”做奇偶校验时,JDK会依照以上公式进行运算,此时dividend为要校验的数,divisor=2我们发现当被除数为负数且为奇数时,余数为-1,如果我们的奇偶校验公式为i%2 =1 ? "奇数":"偶数";那么当i为负奇数时结果判断会错误,因此我们做奇偶校验时要用偶校验,即:i%2 == 0 ? "偶数":"奇数";
java中的引用问题
java中没有指针的概念,但我们要理解另一个名词“引用”。看下面的例子:
实体类
- public class IntString {
- private Integer no;
- private String str;
- public Integer getNo() {
- return no;
- }
- public void setNo(Integer no) {
- this.no = no;
- }
- public String getStr() {
- return str;
- }
- public void setStr(String str) {
- this.str = str;
- }
- @Override
- public String toString() {
- return "IntString [" + (no != null ? "no=" + no + ", " : "")
- + (str != null ? "str=" + str : "") + "]";
- }
- }
测试类:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 45282
- 日志数: 63
- 建立时间: 2008-10-17
- 更新时间: 2013-06-04
清空Cookie - 联系我们 - 51Testing软件测试网 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Powered by 51Testing
© 2003-2021
沪ICP备05003035号