Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
随着全世界程序员使用 Java 编程语言编写类和接口,很多程序员可能会对不同类型使用相同的名称。实际上,前面的示例就是这样:当 java.awt
包中已经存在 Rectangle
类时,它定义了一个 Rectangle
类。尽管如此,编译器允许两个类在不同的包中具有相同的名称。每个 Rectangle
类的完全限定名称包括包名称。也就是说,graphics
包中 Rectangle
类的完全限定名是 graphics.Rectangle
,以及 java.awt
包中的 Rectangle
类的完全限定名是 java.awt.Rectangle
。
除非两个独立的程序员为其包使用相同的名称,否则这很有效。是什么避免了这个问题?规范。
包名称全部小写,以避免与类或接口的名称冲突。
公司使用他们的反向互联网域名来开始他们的包名称,例如在 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 |