JAVA进行式
让我们把JAVA进行到底!
posts - 13,comments - 21,trackbacks - 0
         今天把以前收集的“java  编码规范”找出来读一读,写了几个月代码了,虽然零零星星知道一些关于java的编码规范,可是不是很系统,昨天看到组员写的代码,直观感觉上很不舒服,觉得写得很不符合编码规范,看上去不好看,阅读起来很困难,想给他讲一讲,突然意识到自己也不是很说的清楚,OK,来看看人家是怎么阐述这个编码规范问题吧!         
         那么什么是编码规范呢?
         编码规范就是使用一种语言编写代码时,要遵守的一些约定俗成,或是长期经验总结而成的规矩,这些规矩并不是一定要执行的,也就是说,不执行它,程序照样能编译通过,照样能运行起来,那么我们为什么要去遵守它呢?这是因为我们编写的程序并不仅仅是只给自己一个人看的,在现代软件开发中,往往是由多个人共同完成软件的开发工作,由一个人独立完成大型软件的开发工作,几乎是不可能的。而且在软件开发完成,进入到软件维护阶段后,对软件的维护工作也很可能是由其他人员来进行。那么,编写出的代码就需要多个人去阅读。如果每个人都按照自己的习惯去写代码,就会给其他读代码的人造成很大的困扰,从而影响他对程序的理解、判断,影响他对程序的所进行的维护和改进工作。那么有了编码规范,大家都遵循统一的规范去做,就会大大提高代码的可读性,使开发人员能够迅速而彻底的理解代码,从而提高工作效率。另外,遵守编码规范对于我们编写代码的人来说,也是有利的,随着程序的复杂程度的加深,我们所编写的代码行逐步增多,如果没有在一开始严格遵守规范,而是随性编写,那么在后期也会对我们自己阅读代码造成影响,而且更为严重的是,降低了代码的健壮性,使代码变得容易出错,而不易维护了。
         基于上述原因,做为一个合格程序员,严格遵守编码规范是基本条件。
         先来说说“程序编写规范”,实际上这个标题是“java编码规范”的第一章节的标题,看了内容,感觉不太恰当,可是一时又不知道改什么名好,就照着他的来吧。
         1、exit() 除了在 main() 中可以被调用外,其他的地方不应该被调用。
         这样做是因为不给任何代码截获退出的机会。比如,一个类似后台服务的程序不应该因为某一个库模块决定了要退出就退出。
         2、声明的错误应该抛出一个RuntimeException或者其派生的异常。顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。 
         3、java使用成熟的后台垃圾收集技术来代替引用计数。但是,请记住,java的垃圾收集技术只会对内存中的“垃圾”进行清理,而不会对其他资源,诸如:数据库、磁盘、打印机等进行清理工作。因此你必须在使用完这些对象的实例以后进行清场工作。比如:
         FileOutputStream fos = new FileOutputStream(projectFile);
         project.save(fos, "IDE Project File"); 
         fos.close();      //对文件输出流对象进行关闭(清场工作)
         4、Clone下面是一种有用的方法:
        implements Cloneable
        public  Object clone()
        {
            try 
            {
                 ThisClass obj = (ThisClass)super.clone();
                 obj.field1 = (int[])field1.clone();
                 obj.field2 = field2;
                 return obj;
            } 
            catch(CloneNotSupportedException e) 
            {
                 throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
            }
         }
         这里……我不太看得明白他所写的意思,对于clone()方法我大概知道它是java的根类Object中的一个方法,其作用是创建并返回一个当前对象的拷贝,即是“克隆”一个和当前对象一模一样的另一个对象。那么Cloneable是什么?查了API帮助,知道了,Cloneable是一个接口,只有实现了这个Cloneable接口的类的实例才可以用继承自Object类的clone()方法进行“克隆”,没有实现这个接口的类的实例若调用clone()方法,则会抛出“CloneNotSupportedException”异常。不过,好奇怪,查看了它的源代码,仅仅有一个接口名字,没有声明任何的方法或是常量,基本类库中为什么会有这样一个接口哩?既然所有的类都直接或间接继承自Object类,那为什么还要用一个Cloneable接口来限制其子类能否进行“克隆”操作哩?现在还弄不明白。
        
 3、final 类,绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)。
         最好在类文档中注明一个类目前不能被继承,而不要将它定义为 final 的。因为没有人可以保证会不会由于什么原因需要继承它。(那么,尽量少用final类,呵呵,到目前为止我还没用到过final类,真想知道什么时候一定会用到final类,好象没有地方需要呀)
          4、访问类的成员变量,大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。
          这里……我又不明白了,记得学java的访问权限修饰符时,protected修饰的类成员,仅在类内和类的派生类中可见,把类成员定义为protected,怎么能够防止继承类(派生类)使用哩?如果定义为private,才可能不被继承类使用吧?
我错了吗?
         5、对于数组的声明,要用“int[] packets”,而不是“int packets[]”,后一种永远也不要用。
         这个……,对于后一种,java中好象没有硬性规定不可以用
(C#中倒是只承认前一种声明数组的形式),但写成前一种形式,更具意义一些。
posted on 2005-12-11 15:58 水秀清灵 阅读(414) 评论(0)  编辑  收藏 所属分类: 学习笔记

只有注册用户登录后才能发表评论。


网站导航: