Professional Documents
Culture Documents
[Java 2 Coding ]
JAVA编码标准及规范手册
et
A Standard & Style of Java Code
This handbook shows how to coding the java programe with standard and good style
● 作者: 周甫
邮件: zoof@263.net
版本: 1.0.04-09-2002
最后修改: Sep 04,2002
目 录
Chapter 1 原则
1.1 包的命名原则………………………………………………………………………………. 5
1.2 类命名……………………………………………………………………………………… 5
1.4 大括号{}规则………………………………………………………………………………. 5
1.5 小括号()及逗号,规则……………………………………………………………………… 5
1.6 类文件大小………………………………………………………………………………… 6
1.7 main()方法…………………………………………………………………………………. 6
Chapter 2 代码书写规范
2.1 注释书写规范………………………………………………………………………………7
2.2 类结构书写规范…………………………………………………………………………… 8
2.3 方法结构书写规范…………………………………………………………………………11
2.4 语句行书写规范…………………………………………………………………………… 12
Chapter 3 常用方法命名标准………………………………………………………… 14
Chapter 4 类、方法、变量命名缩写规范………………………………………. 17
rmid……………………………………………………………………………………………… 23
rmiregistry………………………………………………………………………………………. 24
serialver………………………………………………………………………………………… 24
jarsigner………………………………………………………………………………………… 25
keytool………………………………………………………………………………………….. 27
native2ascii…………………………………………………………………………………….. 27
appletviewer……………………………………………………………………………………. 27
extcheck………………………………………………………………………………………… 28
jar……………………………………………………………………………………………….. 29
javac…………………………………………………………………………………………….. 30
javadoc…………………………………………………………………………………………. 31
javah……………………………………………………………………………………………. 37
javap…………………………………………………………………………………………….. 38
C.2 安装 KAWT……………………………………………………………………………….. 48
C.3 如何编译………………………………………………………………………………….. 49
C.4 工具参数使用说明……………………………………………………………………….. 49
C.5 中文问题………………………………………………………………………………….. 52
D.2 特性……………………………………………………………………………………….. 53
D.3 操作……………………………………………………………………………………….. 54
D.4 事件……………………………………………………………………………………….. 55
D.5 提示和窍门……………………………………………………………………………….. 56
E.3 文档注释的格式…………………………………………………………………………... 60
Chapter 1 : 原则
1.1 包的命名原则:
规则一:<com>+<组织名称>+<功能>+<具体功能说明>
规则二:扩展包在“组织名称”后加”x”
Example:
数据库工具包: com.zoof.db
常用工具包: com.zoof.util
日期工具包: com.zoof.util.date
扩展的工具包: com.zoofx.util
1.2 类命名:
规则一:<名称>+<功能(类别)>
规则二:前缀单词首字母大写,前缀略写规则见后
规则三:多个单词紧凑连接,且每个单词首字母大写
Example:
数据库连接: DbConn.java
配置文件读取: ConfRead.java
规则二:方法与方法间留空行(Blank Space)
规则三:操作符号(=、+、|| 等)两边留一个空格
1.4 大括号{}规则
规则一:大括号置于关键字或方法、类名下方同列处.
Example:
public void doit() if(……)
{ {
….. ……
} }
规则二:空方法体,大括号与方法名同行并列
Example:
public void doit() {}
1.5 小括号()及逗号,规则
规则一:<关键字或标识符>+<(左括号>+<参数>+<空格>+<)右括号>
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 6
1.6 类文件大小:
1.7 main()方法:
规则一:公共类(public)必须有 main()方法置于类文件底部,并有测试的简单代码
Chapter 2 : 代码书写规范
2.1 注释书写规范
Javadoc 注释规范主要为类、接口、方法、成员变量生成描述文档的工具,具体的规定请看
(Appendix D),这里仅举一例:
/**
*本程序用于”Fizzbuzz”游戏。 Å 第一段:本类的用途的简要说明
*<p>
*从 1 到 100,如果这个数字是 5 的倍数, Å 第二段:概要说明
*就应该说“fizz”,如果是 7 的倍数,则
*说“buzz”,如果既是 5 的也是 7 的倍数
*就要说“fizzbuzz”。
*<p>
*使用求模操作符来确定数是否能被另一个整除 Å 第三段:算法的概要说明
*<p>
*@author Zoof Chow Å 第四段:作者,按年代顺序排列
*@author ……
*@version %I%,%G% Å 第五段:版本号,这里用 cvs 控制
*@since JDK1.3 Å 第六段:开发时使用的 JDK 版本
*/
2.1.2 段落块(Blocks)与语句(Statements)注释:
对段落(Blocks)与语句的注释,尽量不使用/*…*/而使用//注释,并且注释要精简,一般在语
句转折、算法提示、重要成员变量处注释。下面是不好的与比较好的注释规范的对照:
Example:不好的注释规范:
// applyRotAscii() -- Apply ASCII ROT
private void applyRotAscii(){
try{
int rotLength = Integer.parseInt(rotationLengthField); // get rot len
RotAscii cipher = new RotAscii(rotLength); // new cipher
textArea.setText(cipher.transform(textArea.getText())); // transform
}catch(Exception ex){
/* Show exception */
ExceptionDialog.show(this, "Invalid rotation length: ", ex);
}
}
Example:好的注释书写规范:
/**
* Apply the ASCII rotation cipher to the user's text. The length is retrieved
* from the rotation length field, and the user's text is retrieved from the
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 8
* text area.
*
* @author Thornton Rose
*/
private void applyRotAscii()
{
int rotLength = 0; // rotation length
RotAscii cipher = null; // ASCII rotation cipher
try
{
// Get rotation length field and convert to integer.
rotLength = Integer.parseInt(rotationLengthField.getText().trim());
// Create ASCII rotation cipher and transform the user's text with it.
cipher = new RotAscii(rotLength);
textArea.setText(cipher.transform(textArea.getText()));
}
catch(Exception ex)
{
// Report the exception to the user.
ExceptionDialog.show(this, "Invalid rotation length: ", ex);
}
}
2.2 类结构书写规范
2.2.1 资源列表:
资源列表按以下次序排列:
序列三:第三方厂商类(Third-party classes)
序列四:应用类(Application classes.)
Example:不好的资源列表:
import java.util.*;
import javax.swing.*;
import java.awt.event*;
import com.gensym.com.*;
import javax.swing.table.*;
import com.pv.jfcx.*;
import java.awt.*;
import com.melthorn.util.*;
Example:好的资源列表
import java.awt.*;
import java.awt.event*;
import java.util.*;
import javax.swing.table.*;
import com.gensym.com.*; // BeanXporter
import com.pv.jfcx.*; // ProtoView
import com.melthorn.util.*; // Utilities
Example:好的资源列表(推荐)
// Java classes
import java.awt.*;
import java.awt.event*;
import java.util.*;
import javax.swing.table.*;
// BeanXporter
import com.gensym.com.*;
// Application classes
import com.melthorn.util.*;
2.2.2 类结构安排:
好的类结构组织比不好的结构组织要让人容易理解和维护方便的多,一般地,类结构组织
安排如下:
序列一:Javadoc 注释或者其他头部注释
序列二:类宣告
类宣告又按:
子序列一:extends
子序列二:implements
子序列三:throws
的顺序排列类的声明。
序列三:成员变量宣告
成员变量又按:
子序列二:Public variables.
子序列三:Protected constants.
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 10
子序列四:Protected variables.
子序列五:Package constants.
子序列六:Package variables.
子序列七:Private constants.
子序列八:Private variables.
的顺序排列。
注:
2. 数组类型变量的宣告,格式为:
----插入空行(Blank line)----
序列四:造方法
----插入空行(Blank line)----
序列五:方法(按逻辑归类排列)
----插入空行(Blank line)----
序列六:内部类
----插入空行(Blank line)----
Example:好的类声明书写规范
public class ProductImpl Å 第一行:类名
extends UnicastRemoteObject Å 第二行:父类名(缩进一个 Tab 键)
implements product Å 第三行:接口类名
throws Exception Å 第四行:异常抛出
{
// code..
}
Example:不好的变量声明书写规范:
public class CustomerSearchDialog
extends JDialog
{
private JLabel firstNameLabel = new JLabel();
private JLabel lastNameLabel = new JLabel();
public static final RESULT_SELECT = 1;
private Vector results = new Vector(); // Search results.
/**
* Indicates that a customer was selected; returned by showDialog() when
* user clicks select button.
*/
public static final RESULT_SELECT = 1;
规则二:如果多于 3 个以上的参数,分行书写
规则三:不要在方法名和开括号(“(“)间留空格
规则四:在关括号(“)”)和开大括号间(“{“}保留空格
Example: 好的方法宣告书写规范:
public ProductImpl(String n, Å 当参数有 3 个以上时,分行书写
int s,
int age1
…)
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 12
{
// code
}
Example:坏的方法结构书写规范:
public int getTypeCount (String custType)
{
...
}
static public getInstance(){ ... };
public void showRange()
throws RangeException
{
...
}
Example:好的方法结构书写规范:
/**
* Calculate the consumption coefficient.
*/
public float calculateConsumptionCoefficient(int base,
float variance,
int iterations)
throws RangeException
{
// ...
}
2.4 语句行书写规范
方法或类实例化:
ProductImpl products = new ProductIm (“String 1”, Å 参数超过 3 个,分行书写
0,
200,
…);
2.5 SQL 语句书写规范:
规则一:查询字符串变量统一命名为: query
书写规范:
query = “SELECT Å SQL 关键字大写
name, Å 字段名分行书写
age,
sex
FROM
User Å 表名首字母大写
WHERE
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 13
Chapter 3 常用方法命名标准
为确保方法名(method name)具有语义的一致性,确保动词能准确的描述特殊行为的特征,下
列表格概括了标准的必要动词及其适当的用法。
动词 用法 举例 反义词
果伺服端还要履行对数据的确认,
当确认失败的时候要抛出一个异
常(InvalidValueException 或者等
效异常)。如果不允许复制一个元
素,或者一个特殊的元素已经包含
在存储器里,也要抛出一个异常
(DuplicateValueException 或等
效异常)。如果伺服端需要计算 ID
提供给终端将来使用,就要返回方
法的值,否则,这是一个
无返回值的公共方法。
check
void closeConn()
果需要,返回它。伺服端也许需要
对数据确认,如同上面讨论 add
方法那样也要抛出一个异常
(ObjectCreationException 或等
效异常)。
过。
法销毁它。伺服端实现一个与
release 类似的方法
的方法是:enable.
了。
没有设置(set)值(比如:没有默认
的初始值),就会抛出一个异常
(PropertyNotSetException 或者其
他等价异常).
单方法。如果设置返回 true,否则
返回 false.
true,否则返回 false.
返回特征的值。
-base)对话并返回连接标识符。如
果操作失败抛出一个异常。
(ConnectionException 或者同价
异常)
素唯一性的参数。如果这个元素不
在 list 里 , 将 抛 出 一 个 异 常 。
(NoSuchElementException 或 者
同价异常)
认失败将抛出一个异常。
(InvalidValueException 或者等价
异常)
没有设置’set’—比抛出一个异常
要好),可以把这个特征作为外部参
数返回.
误序列,模块中定义)
Chapter 4 类、方法、变量命名缩写规范
一般方法命名遵循:
规则一:<动词缩写(首字母小写)>+<名词(首字母大写)>
变量命名:
普通变量遵循:
规则二:<前缀缩写(首字母小写)>+< 名词(首字母大写)>
final 变量遵循:
规则三:<F>+<”_”>+<变量名(全大写,各单词间用”_”连接)>
Example:
static 变量遵循:
规则四:<S>+<”_”>+<变量名(首字符大写,各单词间用”_”连接)>
Example:
规则五:<FS>+<”_”>+<变量名(全大写,各单词间用”_”连接)>
Example:
定义变量、类名时尽量的使用下列词汇表中的缩写:
缩 写 全 拼 中 文 义
Acct Account 帐号
Acc Access 访问
Addr Address 地址
Appl Application 应用
Buf Buffer 缓冲
Cb Callback 回叫、复查
Cnf Confirmation 确认
Comm Communication 通讯
Cond Condition 条件
Conn Connection 连接
Db Database 数据库
Desc Description 描述
Dest Destination 目的
Diag Diagnostics 诊断
Dir Directory 目录
Env Environment 环境
Err Error 错误
Hex Hexadecimal 16 进制
Id Identifier 标识符
Inpt Input 输入
Indent Indentation 缩进
It Iterator 迭代
Max Maximum 最大
Mgmt Managment 管理
Min Minimum 最小
NumOf Number Of
Op Operation 操作、运算
Outpt Output 输出
Param Parameter 参数
Pos Position 位置
Proc Procedure 过程
Prog Program 程序
Prj Project 项目
Reg Register 注册
Req Request 请求
Resp Response 回应
Sec Seconds 秒
Seq Sequence 序列
Val Value 值
表格中未提到的,均使用全名,比如:DialogMsg 表示一个信息提示对话框。
缩 写 类 名 中 文 义
btn Button 按钮
frm Frame 框架
lab Label 标签
mnu Menu 菜单
pane Panel 面板
程序。下面就详细介绍这些工具的使用:
z rmic
功能说明:
语法:
补充说明:
命令选项:
-classpath[路径]
指 定 rmic 用 于 查 询 类 的 路 径 。 如 果 设 置 了 该 选 项 , 它 将 覆 盖 缺 省 值 或
CLASSPATH 环境变量。目录用冒号分隔。
-d[目录]
-depend
使编译器考虑重新编译从其它类引用的类。 一般来说,它只重新编译从源代码引
用的遗漏或过期的类。
-g
具所使用的信息。缺省情况下,只生成行号。
-J 与 -D
-keepgenerated
-nowarn
关闭警告。如果使用该选项,则编译器不输出任何警告信息。
-show
-vcompat
-verbose
使编译器和链接器输出关于正在编译哪些类和正在加载哪些类文件的信息。
-v1.1
-v1.2
z rmid
功能说明:
语法:
补充说明:
rmid 工具启动激活系统守护进程。必须先启动激活系统守护进程,才能向激活系
命令选项:
-C<某些命令行选项>
参数的形式传给该子守护进程。
-log[目录]
指定目录的名称,激活系统守护进程在该目录中写入其数据库及相关信息。缺省
-port[端口]
指定 rmid 的 注 册 服 务 程 序 所 使 用 的 端 口 。 激 活 系 统 守 护 进 程 将
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 24
-stem 捆绑在一起。
-stop
z rmiregistry
功能说明:
rmiregistry 命令可在当前主机的指定端口上启动远程对象注册服务程序。
语法:
rmiregistry [port]
补充说明:
任何输出而且一般在后台运行。远程对象注册服务程序是自举命名服务。主机上
的 RMI 服务器将利用它将远程对象绑定到名字上。客户机即可查询远程对象并
进行远程方法调用。注册服务程序一般用于定位应用程序需调用其方法的第一个
远程对象。该对象反过来对各应用程序提供相应的支持,用于查找其它对象。
java.rmi.registry.LocateRegistry 类的方法可用于在某台主机或主机和端口上获
序进行操作,并可用于查询远程对象、将简单(字符串)名称绑定到远程对象、
将新名称重新绑定到远程对象(覆盖旧绑定)、取消远程对象的绑定以及列出绑定
在注册服务程序上的 URL。
z serialver
功能说明:
语法:
serialver [ 命令选项 ]
补充说明:
带参数调用时,它输出用法行。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 25
命令选项:
-show
显示一个简单的用户界面。输入完整的类名并按回车键或“显示”按钮可显示
serialVersionUID。
z jarsigner
功能说明:
语法:
补充说明:
jarsigner 工具用于两个目的:
命令选项:
-keystore[url]
属性“user.home”决定。
-storetype[storetype]
指 定 要 被 实例 化 的 密 钥仓 库 类 型 。默 认 的 密 钥仓 库 类 型 是安 全 属 性 文件中
方法 getDefaultType 返回。
-storepass[password]
指定访问密钥仓库所需的口令。这仅在签名(不是校验)JAR 文件时需要。在这
-keypass[password]
指定用于保护密钥仓库项(由命令行中指定的别名标出)的私钥的口令。使用
的口令与密钥仓库的口令不同,则将提示用户输入它。
-sigfile[file]
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 26
-signedjar[file]
-verify
-certs
件的每个签名人的证书信息。
-verbose
或校验过程中输出额外信息。
-internalsf
文件(签名文件)的完整编码副本。这种做法已被更改。为了减小输出 JAR 文
-internalsf 出现在命令行中,将采用旧的做法。该选项主要在测试时有用;实际
上不应使用它,因为这样将消除有用的优化。
-sectionsonly
关的信息和散列。该选项主要在测试时有用;实际上不应使用它,因为这样将消
除有用的优化。
-J[javaoption]
的一个 “wrapper”)。该选项不应含有任何空格。它有助于调整执行环境或内存
z keytool
功能说明:
来自可信任实体的证书。
语法:
keytool [ 命令 ]
补充说明:
keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关
证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据
完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。
z native2ascii
功能说明:
编码字符的文件。
语法:
补充说明:
备输出。此外,如果也省略 inputfile,则使用标准输入设备输入。
命令选项:
-reverse
码字符的文件。
-encoding[encoding_name]
z appletviewer
功能说明:
行 applet。
语法:
补充说明:
文 档 引 用 的 每 个 applet 。 注 意 : 如 果 url 所 指 向 的 文 档 不 引 用 任 何 带 有
何事情。
命令选项:
-debug
-encoding[编码名称]
-J[javaoption]
数不能含有空格。由多重参数组成的字符串,其中的每个参数都必须以前缀 -J 开
头,该前缀以后将被除去。这在调整编译器的执行环境或内存使用时将很有用。
z extcheck
功能说明:
语法:
补充说明:
的扩展是否有冲突。在安装某个扩展前,可以用该实用程序查看是否已安装了该
扩展的相同版本或更高的版本。
java.lang.Package.isCompatibleWith 方法相同。若未检测到冲突,则返回代码
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 29
错误代码。
命令选项:
-verbose
z jar
功能说明:
Java 归档工具
语法:
补充说明:
新连接。这大大缩短了下载时间。jar 还能压缩文件,从而进一步提高了下载速度。
命令选项:
-c
在标准输出上创建新归档或空归档。
-t
在标准输出上列出内容表。
-x[file]
从标准输入提取所有文件,或只提取指定的文件。如果省略了 file,则提取所有文
件;否则只提取指定文件。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 30
-f
的 jar 文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中,第二个
-v
在标准错误输出设备上生成长格式的输出结果。
-m
myJarFile *.class”
-0
-M
不创建项目的清单文件。
-u
-C
程序示例:
jar tf file.jar
z javac
功能说明:
语法:
命令选项:
-g
在 class 文件中假如所有调试用的信息
-g:none
不在 class 文件中假如所有调试用的信息
-O(英文大写的 O)
-nowarn
会显示一些警告信息。
-verbose
-deprecation
在屏幕上显示程序代码中哪一行指令用到了已经废弃的方法。
-classpath<path>
里去寻找 classpath。
-sourcepath<path>
源文件所在位置
-bootclasspath<path>
-d <direcotry>
-encoding<encoding>
-target<version>
z javadoc
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 32
功能说明:
语法:
其中[ 包名 ]为用空格分隔的一系列包的名字,包名不允许使用通配符,如(*)。
[ 源文件名 ]为用空格分隔的一系列的源文件名,源文件名可包括路径和通配符,
补充说明:
描述公有类、保护类、内部类、接口、构造函数、方法和域。
javac 编译声明部分,忽略成员实现。它建立类的内容丰富的内部表示,包括类层
得用户提供的文档。
当 Javadoc 建立其内部文档结构时,它将加载所有引用的类。由于这一点,
Javadoc 必须能查找到所有引用的类,包括引导类、扩展类和用户类。
命令选项:
-overview i>path/filename
放 到 概 述 页 中 ( overview-summary.html )。 其 中 path/filename 是 相 对 于
-sourcepath 的相对路径名。
-public
只显示公有类及成员。
-protected
只显示受保护的和公有的类及成员。这是缺省状态。
-package
只显示包、受保护的和公有的类及成员。
-private
显示所有类和成员。
-help
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 33
-doclet class
-docletpath classpathlist
路径中,则没有必要使用该选项。
-1.1
等于修正了一些错误。
-sourcepath sourcepathlist
查找源文件。
-classpath classpathlist
个路径,彼此用逗号分隔。
-bootclasspath classpathlist
分隔目录。
-extdirs dirlist
分隔目录。
-verbose
件、生成文档(每个源文件一条信息)和排序的信息。verbose 选项导致打印额
-locale language_country_variant
指定 javadoc 在生成文档时使用的环境。
-encoding name
指定源文件编码名,ExampleEUCJIS/SJIS。如果未指定该选项,则使用平台缺
省转换器。
-J[flag]
空格。
标准 Doclet 提供的选项:
-d directory
-use
对每个带文档类和包包括一个“用法”页。该页描述使用给定类或包的任何 API 的
数。
-version
-author
-splitindex
将索引文件按字母分割成多个文件,每个字母一个文件,再加上一个包含所有以
非字母字符开头的索引项的文件。
-windowtitle[title]
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 35
-doctitle[title]
指定放置在靠近概述概览文件顶部的标题。该标题将作为一级标题,居中地直接
-title[title]
-doctitle。重命名该选项是为了更清楚地表示它定义文档标题而不是窗口标题。
-header[header]
指定放置在每个输出文件顶部的页眉文本。该页眉将放在上部导航栏的右边。
header 中的任何内部引号必须转义。
-footer[footer]
指定放置在每个输出文件底部的脚注文本。脚本将放置在下部导航栏的右边。
footer 中的任何内部引号必须转义。
-bottom[text]
指定放置在每个输出文件底部的文本。该文本将放置在页底,位于下部导航栏的
-link[docURL]
-linkoffline[docURL][packagelistURL]
该选项为外部引用类名字创建指向文档的链接。
-group[groupheading]packagepattern:packagepattern:...
组。各组按命令行中指定的次序出现在页面上。组内的包按字母排序。对于给定
-group 选 项 , 与 packagepattern 表 达 式 列 表 匹 配 的 包 出 现 在 标 题 为
groupheading 的表格中。
-nodeprecated
情,并且它不在文档其余部分生成任何不鼓励使用的 API。当编写代码并不想被
不鼓励使用的代码分心时,这是非常有用的。
-nodeprecatedlist
导航栏中包含该页的链接。
(但是,javadoc 继续在文档其余部分生成不鼓励使用
是非常有用的。
-notree
在生成文档中忽略类/接口层次。缺省地,将产生该层次。
-noindex
在生成文档中忽略索引。缺省地,将产生索引。
-nohelp
在输出的每页顶部和底部的导航栏中忽略“帮助”链接。
-nonavbar
防止产生导航栏、页眉和脚注,否则它们将出现在生成页的顶部和底部。它对
“bottom”选项没有影响。当只对内容感兴趣并且没有必要导航时,Example 仅
-helpfile[path/filename]
指定顶部和底部导航栏中“帮助”链接所链接到的替代帮助文件 path/filename 的
路 径 。不 使用 该 选项 时, Javadoc 自 动 创建 帮助 文 件 help-doc.html ,它 在
-stylesheetfile[path/filename]
-docencoding[name]
z javah
功能说明:
语法:
补充说明:
符。
缺省情况下,javah 为每个在命令行中列出的类都创建一个头文件,且将该文件
接成一个单一文件。
缺省情况下,javah 为每个在命令行中列出的类都创建一个头文件,且将该文件
接成一个单一文件。
命令选项:
-o[输出文件]
将命令行中列出的所有类的头文件或源文件串接到输出文件中。-o 或 -d 两个选
项只能选择一个。
-d[目录]
-stubs
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 38
-verbose
备中。
-help
输出 javah 用法的帮助信息。
-version
输出 javah 的版本信息。
-jni
-classpath[路径]
指 定 javah 用 来 查 询 类 的 路 径 。 如 果 设 置 了 该 选 项 , 它 将 覆 盖 缺 省 值 或
CLASSPATH 环境变量。目录用冒号分隔。
-bootclasspath[路径]
位于 jrelibt.jar 和 jrelibi18n.jar 中。
-old
-force
指定始终写输出文件。
z javap
功能说明:
Java 类文件解析器。
语法:
补充说明:
javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap
命令选项:
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 39
-help
输出 javap 的帮助信息。
-l
输出行及局部变量表。
-b
-public
-protected
-package
-private
显示所有类和成员。
-J[flag]
-s
输出内部类型签名。
-c
-verbose
-classpath[路径]
指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或
CLASSPATH 环境变量。目录用冒号分隔。
- bootclasspath[路径]
位于 jrelibt.jar 和 jrelibi18n.jar 中。
-extdirs[dirs]
覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 40
资料作者: 何先睿
就象 ZIP,ACE 等,但它所被赋予的能力远不止这些,
惑力的。
更为精彩的是,如果浏览器信任该认证,那么作为可信任的 applet,它便能访问非信任的
applet 禁止访问的资源,如本地硬盘和网络。
还有一个不似功能的优点,背靠 sun,自然是好事天天有。
关键是 e 文的,目录又深。国内有些网站也提供下载的,速度也挺快,在搜索引擎里面查找一
书籍下载,有兴趣就去下一个看看,挺不错的。
现在开始 JAR 的第一步,jdk 提供了 jar 的工具,就在 java 所在目录的 bin 目录下有一个
#c 参数表示在标准输出上创建新归档或空归档,
#v 参数表示把添加了一些什么的信息在标准输出上显示,
可以了。
上有一个按钮,右键单击按钮将弹出一个菜单。
这样控件摆完了,接下来是写相应的事件,源程序如下:
package test1;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Applet1 extends Applet
{
boolean isStandalone = false;
PopupMenu popupMenu1 = new PopupMenu();
MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem();
MenuItem menuItem3 = new MenuItem();
Button button1 = new Button();
/**Get a parameter value*/
public String getParameter(String key, String def)
{
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception
{
menuItem1.setLabel("1");
menuItem2.setLabel("2");
menuItem3.setLabel("3");
button1.setLabel("button1");
//这是 button1 的监听事件
button1.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
button1_mousePressed(e);
}
});
popupMenu1.add(menuItem1);
popupMenu1.add(menuItem2);
popupMenu1.add(menuItem3);
this.add(button1, null);
add(popupMenu1);
}
/**Get Applet information*/
public String getAppletInfo()
{
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo()
{
return null;
}
void button1_mousePressed(MouseEvent e)
{
/*通过 InputEvent.BUTTON3_MASK 对右键的判断
要判断是左键用 InputEvent.BUTTON1_MASK,
*/
int mods=e.getModifiers();
if((mods&InputEvent.BUTTON3_MASK)!=0)
{
popupMenu1.show(button1,e.getX(),e.getY());
}
}
}
//applet1.java is over
运行一下,确实可以看到右键弹出了相应的菜单。
我们现在可以打包并发布了.
需要注意的几点是,
2.project class and resources 选 include required class and known resources ,这句
applet,就应该在这里都添加进去
标监听,右键点击事件的中间代码的。
现在只是需要把它发布到浏览器上就可以了。
阶段。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 44
接受,但换到浏览器里面也许又是另一个样子了,当然也有摆得好的,当毕竟是需要时间和经
控 件 就 真 的 是 一 件 很 轻 松 的 事 情 了 , 令 人 遗 憾 的 是 XY 布 局 所 调 用 的 类 是
就真的只有写给自己看了吗,现在有了 JAR,你会发现如按下面的步骤来,是可以很轻松的让
代码上简化一下,去掉暂可不用的代码和一些注释,但保证可以正常运行,
package test1;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import com.borland.jbcl.layout.*;
menuItem2.setLabel("2");
menuItem3.setLabel("3");
button1.setLabel("button1");
button1.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
button1_mousePressed(e);
}
});
this.setLayout(xYLayout1);
button2.setLabel("button2");
button2.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
button1_mousePressed(e);
}
});
button3.setLabel("button3");
button3.addMouseListener(new java.awt.event.MouseAdapter()
{
/*三个按钮的右键事件都为一个*/
public void mousePressed(MouseEvent e)
{
button1_mousePressed(e);
}
});
popupMenu1.add(menuItem1);
popupMenu1.add(menuItem2);
popupMenu1.add(menuItem3);
this.add(button1, new XYConstraints(155, 5, -1, -1));
add(popupMenu1);
}
}
通过在 jbuilder 的预览中可以看到,三个按钮未改动位置,而且右键单击也按要求在一个
Project classes and resources : Include required classes and known resources
Deps。这样便很轻松的完成了相关类的添加工作。
中。
html。
过了就说明找到的文件全了,没有通过就必须再找到,直到不再编译出错为止。最后从 applet
很有帮助的。
j2me_cldc-1_0-src-palm_overlay.zip
到 c:\。
step 2.设置环境变量:
PATH=c:\j2me_cldc\bin;%PATH%
CLASSPATH=%CLASSPATH%;c:\j2me_cldc\bin\api\classes
j2meclasspath=c:\j2me_cldc|bin\api\classes
E:\j2me_cldc-1_0-src-palm_overlay
在 E:\j2me_cldc-1_0-src-palm_overlay \tools\palm\src\palm\database 下:
\database 目录下
j2me_cldc 安装结束.
C.2 安装 KAWT:
Haustein 共同开发和维护。
从www.kawt.de上下载三个软件包:
kawt_io_net_pdb.zip
kawt_io_net.zip
kawt_pdb.zip
KAWT 安装结束.
C.3 如何编译?
以下程序为例:
Example:
import com.sun.kjava.*;
public class HelloWorld extends Spotlet
{
static Graphics g = Graphics.getGraphics();
public HelloWorld()
{
paint();
}
z palm.database.MakePalmApp
功能说明:
语法:
参数说明:
-verbose
-v
息。
-networking
如果所写程序有网络功能,则需要该参数。
-nonetworking
默认值,如果没有网络功能的程序,则不需要该参数。
-classpath
用冒号”:”隔开。
-bootclasspath
-icon <icon>
-listicon <icon>
-name <name>
一个输入的类名称。
-longname <name>
为程序取一个较长的名字,例如在做红外传输时所显示的。
-creator <id>
请),如果没有参数,它会自动产生。
-outfile <name>
-o <name>
同-outfile.
-version <string>
z palm.database.MakePalmDB
功能说明:
语法:
参数说明:
-v、-verbose
同前面提到过的功能。
-classpath
同前面提到过的功能。
-name <name>
同前。
-longname <name>
的名字。
-creator <id>
-type <type>
指定数据库的 TypeID.通常使用”DATA”。
-outfile <name>
-o <name>
同-outfile.
z palm.database.ConvPRCtoJAR
功能说明:
语法:
参数说明:
-v、-verbose
同前面提到过的功能。
-classpath
同前面提到过的功能。
-PRCfile <file>
-outfile、-o <name>
同前面提到过的功能。
C.5 中文问题。
D.1 一般要求
首先,您必须有一个不带有参数的公用构造器。此构造器也应该通过调用各个特性的设置
方法来设置特性的缺省值,例如:
Example:
public Fireworks()
{
setAutoStart(true);
setBackground(Color.black);
setSpeed(10);
setRadius(40);
….
}
如果 bean 是一个从 java.awt.Component 类继承而来的可视 bean,您就应该为 bean
定义一个缺省的首选大小,例如:
Example:
public Dimension getPreferredSize()
{
return (new Dimension(radius*3, radius*3));
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
D.2 特性
量,例如:
Example:
private int speed;
…
public int getSpeed()
{
return speed;
}
set 开头。
repaint();。
Example:
private void validateAll()
{
if (isValid())
{
Component self = this;
self.invalidate();
Component myParent = self.getParent();
if (myParent != null)
{
myParent.invalidate();
self = myParent;
}
self.validate();
}
}
然后以此特性设置的方法调用
validateAll();。
造它,然后在不引起错误的同时在任何命令中设置其特性。
D.3 操作
对于每个您需要的操作,您应该有一个公用方法,例如:
Example:
public void start()
{
if(thread==null)
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 55
{
thread=new Thread(this);
thread.start();
}
}
您为操作写的方法应该在无须期待用户创建连接或设置很多特性的情况下独立操作。 例
如,如果您写了一个音频 Bean,您希望通过播放操作处理打开声音的所有步骤、完成您需要
的所有设置并播放声音。同样,即使声音未播放,停止操作也应起作用。
D.4 事件
对于您需要的每个事件或事件设置,您应该定义事件和侦听器类。对于此例,查看
Example:
import java.awt.*;
import java.util.*;
public class FireworksEvent extends EventObject
{
public static final int EXPLODED = 1;
int id = 0;
public FireworksEvent(Component source, int id)
{
super(source);
this.id = id;
}
public int getID()
{
return id;
}
}
您应该为此事件设置中的每个事件定义一个公用静态结束事件标识符,例如在此例子中的
EXPLODED。
Example:
import java.util.*;
public interface FireworksListener extends EventListener
{
public abstract void exploded(FireworksEvent e);
}
您应该为此事件设置中的每个事件定义一个公用抽象方法,例如在此例子中的 exploded。
将查看到:
private Vector listeners = new Vector();
…...
public void addFireworksListener(FireworksListener f)
{
listeners.addElement(f);
}
义 processEvent 方法并以适当的次数调用它,例如:
Example:
public void processFireworksEvent(FireworksEvent e)
{
for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); )
((FireworksListener)enum.nextElement()).exploded(e);
}
如果您要创建产品级 Bean,请记住先做八件事:
bean 的优势:
jar 或安装程序
程序。
JAR 向导会为您做这些。
您需要记住并自己完成的两件事是:特性编辑器和定制器。定制器、对话框特性编辑器或
选择特性编辑器中的所有术语,例如高、中、低,也必须为翻译而分隔。 理想情况下,您也可
并使您获得清单文件权。
如果您不指定依赖于:标签,工具将假设所有文件都是在运行时需要。这对于下载性能(例
如不必要地下载特性编辑器和其它只在编辑时需要的文件)是很不好的。
性,则首选大小应被写入以相应地调整自身。
为 bean 指定缺省特性
向导使这个操作变得简单并为您获得 BeanInfo 权。
为 bean 及其特性指定简要的非技术名称和简短描述
寻 找 简 要 的 非 技 术 名 来 代 替 冗 长 的 技 术 术 语 。 例 如 , 用 sum interval 代 替
accumulatorInterval。还请注意,特性名的首选项以小写表示并在字与字间留有空格,这对于
用户将更友好。
缩小用户可见的特性范围
权。
为 bean 指定大图标和小图标
不同于灰色的透明背景。尽管很少使用,您也应养成提供黑色和白色图标的习惯。JAR 向导的
文章作者:边城狂人
E.1 前言
// 注释一行
/* ...... */ 注释若干行
不完全对,除了以上两种之外,还有第三种,文档注释:
通常这种注释的多行写法如下:
/**
* .........
* .........
*/
暂停,暂停!这第三种注释有什么用?javadoc 又是什么东西?
好,那就让我告诉你——
档。它分包、分类详细的提供了各方法、属性的帮助信息,具有详细的类树信息、索引信息等,
并提供了许多相关类之间的关系,如继承、实现接口、引用等。
但是你肯定想不到,这些文档我们可以自己生成。——就此打住,再吊一次胃口。
这些注释都有点似曾相识的感觉?
排版。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 60
是什么工具把这些注释变成文档的呢?
介绍 javadoc 的编译命令之前,还是先了解一下文档注释的格式吧。不过为了能够编译下
个选项可以省略。
E.3 文档注释的格式
定之外,还需要注意注释内部的一些细节问题。
1. 文档和文档注释的格式化
是我们在写注释的时候写上去的。比如,需要换行时,不是敲入一个回车符,而是写入 <br>,
如果要分段,就应该在段前写入 <p>。
后,删掉前导的 * 号及 * 号以前的空格,再输入到文档的。如
Example:
/**
* This is first line. <br>
* This is second line. <br>
*This is third line.
*/
编译输出后的 HTML 源码则是
Example:
使用,如上例的第一行和第二行;如果没有前导的 * 号,则边界从第一个有效字符开始,
而不包括前面的空格,如上例第三行。
还有一点需要说明,文档注释只说明紧接其后的类、属性或者方法。如下例:
Example:
/** comment for class */
public class Test
{
/** comment for a attribute */
int number;
/** comment for a method */
public void myMethod() { ...... }
......
}
上例中的三处注释就是分别对类、属性和方法的文档注释。它们生成的文档分别是说
明紧接其后的类、属性、方法的。
“紧接”二字尤其重要,如果忽略了这一点,就很可能造
成生成的文档错误。如
Example: 正确的例子
import java.lang.*;
错:
Example: 错误的例子
/** commnet for class */
import java.lang.*;
public class Test { ...... }
这个例子只把上例的 import 语句和文档注释部分交换了位置,结果却大不相同——
生成的文档中根本就找不到上述注释的内容了。原因何在?
“/** commnet for class */”是对 class Test 的说明,把它放在“public class Test
语句。由于文档注释只能说明类、属性和方法,import 语句不在此列,所以这个文档注释
就被当作错误说明省略掉了。
2. 文档注释的三部分
根据在文档中显示的效果,文档注释分为三部分。先举例如下,以便说明。
Example:
/**
* show 方法的简述.
* <p>show 方法的详细说明第一行<br>
* show 方法的详细说明第二行
* @param b true 表示显示,false 表示隐藏
* @return 没有返回值
*/
public void show(boolean b)
{
frame.show(b);
}
第一部分是简述。文档中,对于属性和方法都是先有一个列表,然后才在后面一个一
个的详细的说明。列表中属性名或者方法名后面那段说明就是简述。如下图中被红框框选
的部分:
就是用第一个点号分隔文档注释,之前是简述,之后是第二部分和第三部分。如上例中的 “*
show 方法的简述.”。
有时,即使正确地以一个点号作为分隔,javadoc 仍然会出错,把点号后面的部分也
来分隔。
第二部分是详细说明部分。该部分对属性或者方法进行详细的说明,在格式上没有什
么特殊的要求,可以包含若干个点号。它在文档中的位置如下图所示:
这部分文档在上例中相应的代码是:
* show 方法的简述.
* <p>show 方法的详细说明第一行<br>
* show 方法的详细说明第二行
发现什么了?对了,简述也在其中。这一点要记住了,不要画蛇添足——在详细说明
部分中再写一次简述哦!
第三部分是特殊说明部分。这部分包括版本说明、参数说明、返回值说明等。它在文
档中的位置:
第三部分在上例中相应的代码是
* @param b true 表示显示,false 表示隐藏
* @return 没有返回值
除了 @param 和 @return 之外,还有其它的一些特殊标记,分别用于对类、属性和
方法的说明……不要推我,我马上就说。
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 64
E.4 使用 javadoc 标记
javadoc 标记是插入文档注释中的特殊标记,它们用于标识代码中的特殊引用。javadoc 标
记由“@”及其后所跟的标记类型和专用注释引用组成。记住了,三个部分——@、标记类型、
专用注释引用。不过我宁愿把它分成两部分:@ 和标记类型、专用注释引用。虽然 @ 和 标
记类型之间有时可以用空格符分隔,但是我宁愿始终将它们紧挨着写,以减少出错机会。
javadoc 标记有如下一些:
标 记 用 于 作 用
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
下面详细说明各标记。
1. @see 的使用
@see 的句法有三种:
@see 类名
@see #方法名或属性名
@see 类名#方法名或属性名
类名,可以根据需要只写出类名 (如 String) 或者写出类全名 (如 java.lang.String)。
那么什么时候只需要写出类名,什么时候需要写出类全名呢?
方法名或者属性名,如果是属性名,则只需要写出属性名即可;如果是方法名,则需
要写出方法名以及参数类型,没有参数的方法,需要写出一对括号。如
成员类型 成员名称及参数 @see 句法
属性 number @see number
属性 count @see count
方法 count() @see count()
方法 show(boolean b) @see show(boolean)
方法 main(String[] args) @see main(String[])
有时也可以偷懒:假如上例中,没有 count 这一属性,那么参考方法 count() 就可以
@see 的第二个句法和第三个句法都是转向方法或者属性的参考,它们有什么区别
呢?
第二个句法中没有指出类名,则默认为当前类。所以它定义的参考,都转向本类中的
属性或者方法。而第三个句法中指出了类名,则还可以转向其它类的属性或者方法。
说明时用法都一样,所以这里只以对类说明为例。
Example:
/**
* @see String
* @see java.lang.StringBuffer
* @see #str
* @see #str()
* @see #main(String[])
* @see Object#toString()
*/
public class TestJavaDoc
{
……
}
生成的文档的相关部分如下图:
两个类可以直接写类名,也可以写类全名。str、str() 为同名属性和方法,所以方法名需要
Object#toString()。
译,所以,生成的文档没有关于那三个类的信息,也就不可以建立链接了。后面讲解 javadoc
编译命令的时候还会详细说明。
表示方法 str()。
2. 使用 @author、@version 说明类
法如下:
@author 作者名
@version 版本号
其中,@author 可以多次使用,以指明多个作者,生成的文档中每个作者之间使用逗
为最新版本号。如下例
Example:
/**
* @author Fancy
* @author Bird
* @version Version 1.00
* @version Version 2.00
*/
public class TestJavaDoc
{
}
生成文档的相关部分如图:
从图上看,作者列表是以逗号分隔的,如果我想分行显示怎么办?另外,如果我想显
示两个以上的版本号又该怎么办?
Example:
@author Fancy<br>Bird
@version Version 1.00<br>Version 2.00
结果如图:
值,@exception 描述方法可能抛出的异常。它们的句法如下:
@param 参数名 参数说明
@return 返回值说明
@exception 异常类名 说明
每一个 @param 只能描述方法的一个参数,所以,如果方法需要多个参数,就需要
名还是类全名。 示例如下:
Example:
public class TestJavaDoc
{
/**
* @param n a switch
* @param b excrescent parameter
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 68
使用 javadoc 编译生成的文档相关部分如下图:
确匹配参数表与方法中正式参数表的项目。如果方法参数表中的参数是 a,文档中却给出
上例程序中并没有抛出一个 NullPointerException,但是文档注释中为什么要写上这
么一句呢,难道又是为了演示?这不是为了演示描述多余的异常也能通过编译,而是为了
Author: Zoof Chow WebSite:www.7ing.net Email:zoof@263.net
Java 编码标准及规范手册 69
令。
E.5 javadoc 命令
用法:
选项:
-private 显示所有类和成员
-d <directory> 输出文件的目标目录
-version 包含 @version 段
-author 包含 @author 段
-splitindex 将索引分为每个字母对应一个文件
下有两个包若干类如下:
Example:
fancy.Editor
fancy.Test
fancy.editor.ECommand
fancy.editor.EDocument
fancy.editor.EView
fancy\editor\EDocument.java fancy\editor\EView.java
际情况改变。也可以是给出包名作为编译参数,如:
用第二条命令生成的文档被框架分成了三部分:包列表、类列表和类说明。在包列表中选
择了某个包之后,类列表中就会列出该包中的所有类;在类列表中选择了某个类之后,类说明
部分就会显示出该类的详细文档。而用第一条命令生成的文档只有两部分,类列表和类说明,
没有包列表。这就是两种方式生成文档的最大区别了。
下面再来细说选项。
-public、-protected、-package、-private 四个选项,只需要任选其一即可。它们指定的显
示类成员的程度。它们显示的成员多少是一个包含的关系,如下表:
-private (显示所有类和成员)
-d 选项允许你定义输出目录。如果不用 -d 定义输出目录,生成的文档文件会放在当前目
录下。-d 选项的用法是
-d 目录名
目录名为必填项,也就是说,如果你使用了 -d 参数,就一定要为它指定一个目录。这个
不加这两个参数的情况下,生成的文档中不包含版本和作者信息。
-splitindex 选项将索引分为每个字母对应一个文件。默认情况下,索引文件只有一个,且
该文件中包含所有索引内容。当然生成文档内容不多的时候,这样做非常合适,但是,如果文
档内容非常多的时候,这个索引文件将包含非常多的内容,显得过于庞大。使用 -splitindex 会
把索引文件按各索引项的第一个字母进行分类,每个字母对应一个文件。这样,就减轻了一个
索引文件的负担。
-windowtitle 选项为文档指定一个标题,该标题会显示在窗口的标题栏上。如果不指定该
标题,而默认的文档标题为“生成的文档(无标题)”。该选项的用法是:
-windowtitle 标题
标题是一串没有包含空格的文本,因为空格符是用于分隔各参数的,所以不能包含空格。
文章——生成开发文档。
Æ2002/09/07 完成初稿
Todo list
计划增加内容列表:
EJB 参考
Bean 标准规范