Java program coding specification

xiaoxiao2021-03-06  87

All procedures development brochures contain various rules. Some customary free proceeders may not be adapted to these rules, but these rules are required in the case of working with multiple developers. This is not only for development efficiency, but also for later maintenance considerations.

Naming Specifications Definition The purpose of this specification is to make all documents in the project look like a person written, increase readability, and reduce the loss in the project group because of the loss. (These norms are not necessarily abolished, but must have a good readability)

The name of the name of Package should be composed of a lowercase word.

The name of the Class's named Class must consist of one or more words whose uppercase letters and other letters.

The name of the name variable of the Class variable must be started with a lowercase letter. The latter words begin with uppercase letters.

The name of the Static Final variable should be capitalized and point out the full meaning.

The naming input parameter of the parameter is headed by the in, the output parameter is headed by OUT. The name must be consistent with the naming specification of the variable.

The named array of arrays should always be named in the following way:

BYTE [] BUFFER

Instead:

BYTE BUFFER [];

The parameters of the method use meaningful parameters, if possible, use the same name as the field to assign the value plus the IN / OUT prefix:

SetCounter (int insize, int outsize) {this.size = insize; outsize = this.size;}

The Java file style has a Java (*. Java) file must comply with the following style rules.

Copyright Information The copyright information must be on the beginning of the Java file, such as:

/ ** * Copyright? 2000 Shanghai xxx Co. Ltd. * all rights reserved. * /

Others do not need to appear in Javadoc, can also be included here.

Package / ImportsPackage Row Before the IMPORT row, the standard package name in the Import is previously in the local package name, and arranged in alphabetical order. If the IMPORT line contains different subdirectory in the same package, you should use * to process.

Package hotlava.net.stats;

Import java.io. *; import java.util.observable; import hotlava.util.application;

Here java.io. * is used to replace InputStream and OutputStream.

Class is next to the annotation of the class, usually used to interpret the class.

/ ** * a class representing a set of packet and byte counters * it is observable to allow it to be watch, but only * reports change,

Next is a class definition, including extends and imports in different rows.

Public Class Counterset Extends Observable Implements Cloneable

Class Fields Next is a member variable of class:

/ ** * packet counter * / protected int [] packets;

Public member variables must generate a document (javadoc), if description is short, you can use / ** * / to write instructions. Member variables defined by Proceted, Private and Package If the name meaning is clear, you can not comment.

Access method Next is a method of access to class variables. It is just simple to get values ​​to assign values ​​to the class variable, you can simply write on one line. / ** * 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;}

Other methods don't write on a line.

The constructor is next to the constructor, which should be written in an incremental manner (such as: writing more than the parameter). Access Type ("Public", "Private", etc.) and any "static", "firm" or "synchronized" should be in one line, if a row is too long, the method and parameters should be written separately, which makes the method and The parameters are more readily read. Keywords must be written in a certain order, as shown below:

Public static final synchronizedint counterset (int size) {this.size = size; return this.size;}

Cloning method If this class can be cloned, then the next step is Clone method:

Public Object Clone () {Try {counter = (counter) super.clone (); obj.packets = (int []) Packets.clone (); obj.size = size; returnobj;} catch (ClonenNotsuPortedException E) {Throw new interNalerror ("Unexpected ClonyNotSupportedException:" E.getMessage ());}}

Class Method Next: The method of writing classes (the description is best to provide @param and @return):

/ ** * set the packet counters * (Such As When Restoring from a database) * / protected final void setArray (int [] R1, int [] R2, int [] R3, int [] R4) throws illegalgumentexception {//// // ensure the arrays area of ​​equal size // if (r1.length! = R2.length || r1.length! = R3.Length || r1.length! = R4.Length) throw new IllegalargumentException ("Arrays Must BE "); System.Arraycopy (R1, 0, R3, 0, R1.Length); System.ArrayCopy (R2, 0, R4, 0, R1.LENGTH);} Tostring method in any case, each class Should define the toString method:

Public string toString () {string retval = "counter"; for (int i = 0; i

Main method If the main (String []) method is already defined, it should be written at the bottom of the class.

Code writing format

Code style code should use UNIX's format, not Windows (such as: Enter the carriage return wrap)

Documentization must write source code annotations for Javadoc understanding, and generate documents for class with Javadoc. Not only because it is standard, this is also a method recognized by various Java compilers.

After indent, please use the Tab character to indent the tap and set the width of the Tab to 4 characters; ensure that the editor "automatically converts the TAB Conversion to the spacegate" option is valid. Otherwise, once the editor of others is inconsistent, the entire format is chaotic when the width is inconsistent.

Page width width should be set to 80 characters, and source code will generally not exceed this width and cause unable to display, but this setting can also be flexible. In any case, the long statement should be folded after a comma or a operator, and after a statement, it should be aligned with the original statement.

{} The statement in {} should be a row alone. For example, the first line below is wrong, the second line is correct:

IF (i> 0) {i }; // error, {and} in the same line

IF (i> 0) {i ;} // correct, {separate as a line

{Should be followed by the statement instead of another row.} The statement is always a row alone.

} The statement should be indented to the location of the {that row relatively aligned with it. Even if there is only one line of statements, it should be included in {} so that new statements are added in the future.

There should be a space between the parentheses left parentheses and the latter characters. Similarly, there should be no space between the right brackets and the previous characters. The following example shows the incorrect of parentheses and spaces and correct usage: CallProc (APARAMETER); // Error CallProc (APARAMETER); // Do not use meaningless parentheses in the statement. Braces should only be in the source code to achieve some purpose. The following example illustrates errors and correct usage: if (42 == (i)) {// Error - Braces meaningless IF ((42 == i) || (42 == j)) {// correct- It is indeed necessary for parentheses or arithmetic operators. It must be added with space characters on both sides, not all crowded together, such as int NA = a v * c; // Error - no space INR NA = A V * C; / / correct - need space

Conditional statement, please compare the following two ways: if (ntype == -1) ... if (-1 == nType) ... Use the first method may cause: When you accidentally write == = When (this situation often occurs), the first way to write may cause you to see the code for hundreds of times can't find this error; and the second way of writing will be compiled during the compilation phase. Tell you this error. Therefore, when conditions are compared, the constant value must be placed in front of the == number. In addition, for the comparison of the boolean value, True or FALSE must be clear, such as if (getFileType ()) // Error IF (True == getFileType ()) // correct

Program writing specification

EXIT () EXIT In addition to being called in main, other places should not be called. Because this does not give any code code opportunities to intercept exit. A similar background service ground program should not be exited because a library module determines to exit.

An abnormally declared error should throw a runtimeException or derived exception. The top () function of the top layer should intercept all exceptions and print (or record it in the log) on ​​the screen.

Garbage collection Java uses mature background garbage collection techniques instead of reference count. But this will result in a problem: You must work after the instance of the object is used. For example, a PREL programmer may write:

... {fileoutputstream fos = new fileoutputstream (projectfile); Project.save (FOS, "IDE Project File");} ...

Unless the output stream is turned off, it is not a reference to the program language, such as Java, is a clearing work of the variable. Must be written as follows:

FileOutputStream Fos = new fileoutputstream (projectfile); Project.save (FOS, "IDE Project File"); fos.close (); fos = null; // Place it to null after using variables, this is Help the work of garbage collectors

The following is a useful method:

Implements Cloneable

Public Object Clone () {THISCLASS) Super.clone (); obj.field1 = (int []) Field1.clone (); obj.field2 = field2; returnobj;} catch (ClonenOtSupportedException E) {Throw New InterNalerror ("Unexpected ClonyNotSupportedException:" E.GETMESSAGE ());}} Final class Never definition of class as final (unless the program frame requirements) is not ready for a class It is best to indicate in class documents instead of defining her as Final. This is because no one can guarantee that it will not be inherited because of what reason.

Most of the members variables of the members of the access class should be defined as protected to prevent inheritance classes. Note, use "int [] packets" instead of "int packets []", the latter is never used.

Public void setpackets (int [] packets) {this.packets = packets;}

INTERSET (INT size) {this.size = size;}

When servlet's naming rules are deployed for servlets, uniformly use the .svr's suffix name as a servlet's access method. When configuring the mysomeaction this servlet in WeSomeAction, the configuration information is as follows:

mysomeAction

com.sportscn.mypackage.mysomeAction

mysomeAction

/ mysomeaction.svr

Programming skills

Byte array transition to Characters In order to convert the BYTE array to Characters, you can do this: "Hello World!". Gettes ();

The Utility class UTILITY class (class only provides a class) should be stated to abstract to prevent inheritance or initialization.

Initializing the following code is a good method of initialization array: Objectarguments = new object [] {arguments}

Enumeration Type Java is not good for enumeration, but the following code is a useful template:

Class colour {public static final colour black = new color static final color red = new color final color set = new color final color green = new color final color green = new color (0, 0xff, 0) Public static final colour blue = new color final color White = new color final color white = new color (0xFF, 0xFF, 0xFF);} This technology implements RED, Green, Blue, etc. can like other languages. Enumerate types of constants are used. They can compare with '==' operators. But this is used in this way: if a user uses such a method to create a color Blacknew color (0,0,0) then this is another object, '==' operator generates an error. Her equal () method is still valid. For this reason, the defect of this technology is best to indicate in the document, or only in your own package.

Swing

Avoid using AWT components

Mixing Use the AWT and SWING components If you want to mix the AWT components and Swing components, use it. In fact, try not to mix them up.

Scrolling AWT component AWT components must not use JScrollPane classes to implement scrolling. When scrolling the AWT component, you must use the AWT SCROLLPANE component to be implemented.

Avoid using AWT components to do so as much as possible in the InternalFrame component, or there will be unpredictable consequences.

Z-Order issues The AWT component is always displayed on the Swing component. Be careful when using the POP-UP menu containing the AWT component, try not to use it like this.

debugging

Debugging is a very important part of software development, exists in various parts of the software lifecycle. Debug can be opened with configuration, the key is the most basic. A very commonly used debugging method is to use a PrintStream class member, when not defined the trial flow, the class wants to define a DEBUG method to set the stream of debugging.

performance

When writing code, you should consider performance issues from head until tails. This is not to say that time should be wasted on the optimization code, but we always remind yourself to pay attention to the efficiency of the code. For example, if there is no time to implement an efficient algorithm, then we should record in the document so that you will come again in the future.

Unnecessary object structure

Do not construct and release objects in the loop

Using the StringBuffer object When processing String, try to use the StringBuffer class as possible, and the StringBuffer class is the basis for constituting the String class. The String class encapsulates the StringBuffer class, (at the expense of more time) provides a secure interface to developers. When we are constructing a string, we should use StringBuffer to implement most of the work, and convert the StringBuffer object to the required String object when the work is completed. For example, if there is a string that must be constantly adding a lot of characters to complete the construct, we should use the StringBuffer object and her append () method. If we use the String object instead of the StringBuffer object, you will spend a lot of unnecessary CPU time to create and release the object.

Avoid too much use synchronized keyword to avoid unnecessary use of keyword synchronized, should use her when necessary, this is a good way to avoid deadlocks. Portability Borland Jbulider does not like synchronized this keyword. If your breakpoint is located in the scope of these keywords, you will find the breakpoint when you debug, let you do it. Minimize not to use unless you must

If you need to wrap, try to use PrintLn to use "/ n" in a string. You don't want this: system.out.print ("Hello, World! / N"); you should: system.out.println ("Hello, World!"); Or you construct a string with changing lines, at least Like this: string newline = system.getProperty ("line.separator"); System.out.Println ("Hello World" Newline);

PrintStreamPrintStream has been used in favor (deprecated), with PrintWriter instead of her.

转载请注明原文地址:https://www.9cbs.com/read-124048.html

New Post(0)