随着全世界的程序员使用Java编程语言编写类和接口,许多程序员很可能会对不同的类型使用相同的名称。事实上,前面的例子中做到了这一点:它定义一个Rectangle类时,已经有一个Rectangle类在java.awt包。但是,如果它们在不同的程序包中,则编译器允许这两个类具有相同的名称。每个Rectangle类的完全限定名称包括程序包名称。即,graphics包中Rectangle类的完全限定名称为graphics.Rectanglejava.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