此Java教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
使用Java编程语言编写类和接口的程序员遍布全球,很可能许多程序员会为不同的类型使用相同的名称。事实上,前面的示例就是这样做的:它定义了一个Rectangle
类,而java.awt
包中已经有了一个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 |