随着全世界的程序员使用Java编程语言编写类和接口,许多程序员很可能会对不同的类型使用相同的名称。事实上,前面的例子中做到了这一点:它定义一个Rectangle
类时,已经有一个Rectangle
类在java.awt
包。但是,如果它们在不同的程序包中,则编译器允许这两个类具有相同的名称。每个Rectangle
类的完全限定名称包括程序包名称。即,graphics
包中Rectangle
类的完全限定名称为graphics.Rectangle
,java.awt
包中类的Rectangle
完全限定名称为java.awt.Rectangle
。
除非两个独立的程序员为其软件包使用相同的名称,否则此方法效果很好。是什么避免了这个问题?惯例。
命名约定
软件包名称以小写形式编写,以避免与类或接口的名称冲突。
公司使用其反向的Internet域名来开始其软件包名称,例如,对于程序员在example.com
处创建的名为mypackage
的软件包com.example.mypackage
。
单个公司内部发生的名称冲突需要按照该公司内部的约定进行处理,也许可以通过在公司名称之后添加区域或项目名称(例如com.example.region.mypackage
)来解决。
Java语言包本身以java.
或javax.
开头
在某些情况下,互联网域名可能不是有效的软件包名称。如果域名包含连字符或其他特殊字符,或者程序包名称以数字或其他字符开头的Java名称开头非法,或者程序包名称包含保留的Java关键字,则可能会发生这种情况例如“ int”。在这种情况下,建议的约定是添加下划线。例如:
使软件包名称合法化
域名 | 软件包名称前缀 |
---|---|
hyphenated-name.example.org |
org.example.hyphenated_name |
example.int |
int_.example |
123name.example.com |
com.example._123name |