JAVA进行式
让我们把JAVA进行到底!
posts - 13,comments - 21,trackbacks - 0
         Java程序一个类一个文件,文件名以类名命名,我想这个大家都知道吧,那么关于java源代码文件的格式还有什么要注意的呢?看看人家怎么说的吧:

         1、版权信息,必须在 java 文件的开头,比如:

     /*
      * Copyright ? 2000 Shanghai XXX Co. Ltd.
      * All right reserved.
      */

         其他不需要出现在 javadoc 的信息也可以包含在这里。

         2、Package/Imports 
         package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

         package hotlava.net.stats;

         import java.io.*;
         import java.util.Observable;
         import hotlava.util.Application

         这里 java.io.* 使用来代替InputStream and OutputStream 的。
         (关于这点,有点疑问,我知道详细的写出引用类的路径及类名,可以较快的搜索到要引用的类,可是一个包中要引用的类过多的话,是不是用*来处理,比全部写出来好哩?全部写出来会很长,不方便阅读,不过现在的IDE大都有收缩功能,问题也不大吧?)

         3、对类的注释(解释类的功能),采用文档注释,写在类声明之前。例如: 

          /**
           * A class representing a set of packet and byte counters
           * It is observable to allow it to be watched, but only
           * reports changes when the current set is complete
           */
         
         接下来是类定义的格式,包含了在不同的行的 extends 和 implements

      public class CounterSet
		         extends Observable
		         implements Cloneable


     (这样写呀,第一次看到,我想我不太喜欢这种写法,这也是规范吗?)

         4、类的成员变量,在声明之前也要用文档注释说明其意义。例如:

         /**
          * Packet counters
          */
         protected int[] packets;

         public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。
         (因为public的成员变量是类的接口,是供用户程序员使用的,所以必须生成文档,所以必须用文档注释标注)
         5、类变量的存取的方法,在其声明之前也要用文档注释说明其意义。
         若它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。 例如:

     /**
      * Get the counters
      * @return an array containing the statistical data.  This array has been
      * freshly allocated and can be modified by the caller.
      */
      public int[] getPackets() { return copyArray(packets, offset); }
      public int[] getBytes() { return copyArray(bytes, offset); }

      public int[] getPackets() { return packets; }
      public void setPackets(int[] packets) { this.packets = packets; }

   
             其它的方法不要写在一行上。

         6、构造函数,应该用递增的方式写(比如:参数多的写在后面)。
         访问类型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 应该在一行中,并
且方法和参数另写一行,这样可以使方法和参数更易读。





         public          CounterSet(int size){              this.size = size;          }
         (这么写?不习惯,保留意见)          
7、克隆方法,如果一个类是可以被克隆的,那么在定义类时应该重写其继承的 clone 方法:
     public
     Object clone() {
       try {
          CounterSet obj = (CounterSet)super.clone();
          obj.packets = (int[])packets.clone();
          obj.size = size;
          return obj;
       }catch(CloneNotSupportedException e) {
          throw new InternalError("Unexpected CloneNotSUpportedException: " 
                                 + e.getMessage());      }      }

         8、类方法(定义为final或static的,类而非其实例对象所拥有的方法),例如:

     /**
      * Set the packet counters
      * (such as when restoring from a database)
      */
      protected final
      void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
                    throws IllegalArgumentException
      {
        //
        // Ensure the arrays are of equal size
        //
        if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
	   throw new IllegalArgumentException("Arrays must be of the same size");
        System.arraycopy(r1, 0, r3, 0, r1.length);
        System.arraycopy(r2, 0, r4, 0, r1.length);
      }





    9、toString 方法,每一个类都应该对继承自Object类的 toString 方法进行重写:
     
      public
      String toString() {
        String retval = "CounterSet: ";
        for (int i = 0; i < data.length(); i++) {
            retval += data.bytes.toString();
            retval += data.packets.toString();
        }
        return retval;
      }
 
    10、main 方法
      如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.
      (这样子的?为什么把main()方法写在类的一开始不好哩?)
posted on 2005-12-11 18:50 水秀清灵 阅读(345) 评论(0)  编辑  收藏 所属分类: 学习笔记

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


网站导航: