包
本课程解释了如何将类和接口捆绑到包中,如何使用包中的类,以及如何安排文件系统以便编译器可以找到源文件。
创建和使用包为了使类型更易于查找和使用,避免命名冲突和控制访问,程序员将相关类型的组捆绑到包中。
定义:包是一组提供访问保护和名称空间管理的相关类型,请注意,类型引用类、接口、枚举和注解类型,枚举和注解类型分别是特殊的类和接口,因此在本课中通常将类型简称为类和接口。
作为Java平台一部分的类型是按功能捆绑类的各种包的成员:基础类在java.lang中,用于读写的类(输入和输出)在java.io中,依此类推,你也可以将类型放入包中。
假设你编写了一组表示图形对象的类,例如圆形、矩形、线条和点,你还可以编写一个Draggable接口,如果类可以使用鼠标拖动,则可以实现这个接口。
//in the Draggable.java file public interface Draggable { ... } //in the Graphic.java file public abstract class Graphic { ... } //in the Circle.java file public class Circle extends Graphic implements Draggable { . . . } //in the Rectangle.java file public class Rectangle extends Graphic implements Draggable { . . . } //in the Point.java file public class Point extends Graphic implements Draggable { . . . } //in the Line.java file public class Line extends Graphic implements Draggable { . . . }
你应该将这些类和接口捆绑在一个包中,原因有多种,包括:
你和其他程序员可以轻松确定这些类型是否相关。
你和其他程序员知道在哪里可以找到可以提供与图形相关的功能的类型。
类型的名称不会与其他包中的类型名称冲突,因为包会创建新的命名空间。
你可以允许程序包中的类型对彼此具有不受限制的访问权限,但仍限制对程序包外部类型的访问。
创建包要创建包,请为包选择一个名称,将包含该名称的package语句放在每个源文件的顶部,该文件包含要包含在包中的类型(类、接口、枚举和注解类型)。
package语句(例如,package graphics;)必须是源文件中的第一行,每个源文件中只能有一个package语句,它适用于文件中的所有类型。
如果将多个类型放在单个源文件中,则只有一个可以是公共的,并且它必须与源文件具有相同的名称,例如,你可以在文件Circle.java中定义public class Circle,在文件Draggable.java中定义public interface Draggable,在文件Day.java中定义public enum Day,依此类推。可以在与公共类型相同的文件中包含非公共类型(强烈建议这样做,除非非公共类型很小且与公共类型密切相关),但只有公共类型可以从包外部访问,所有顶级非公开类型都将是包私有。
如果将上一节中列出的图形接口和类放在名为graphics的包中,则需要六个源文件,如下所示:
//in the Draggable.java file package graphics; public interface Draggable { . . . } //in the Graphic.java file package graphics; public abstract class Graphic { . . . } //in the Circle.java file package graphics; public class Circle extends Graphic implements Draggable { . . . } //in the Rectangle.java file package graphics; public class Rectangle extends Graphic implements Draggable { . . . } //in the Point.java file package graphics; public class Point extends Graphic implements Draggable { . . . } //in the Line.java file package graphics; public class Line extends Graphic implements Draggable { . . . }
如果不使用package语句,则类型最终会出现在未命名的包中,一般来说,一个未命名的包只适用于小型或临时应用程序,或者刚刚开始开发过程,否则,类和接口属于命名包。
命名包随着全世界程序员使用Java编程语言编写类和接口,很多程序员可能会对不同类型使用相同的名称,事实上,前面的例子就是这样:当java.awt包中已经有一个Rectangle类时,它定义了一个Rectangle类,尽管如此,编译器允许两个类在不同的包中具有相同的名称。每个Rectangle类的完全限定名称包括包名称,也就是说,graphics包中Rectangle类的完全限定名称是graphics.Rectangle,java.awt包中Rectangle类的完全限定名是java.awt.Rectangle。
除非两个独立的程序员为其包使用相同的名称,否则这很有效,是什么防止了这个问题?公约。
命名约定包名称全部小写,以避免与类或接口的名称冲突。
公司使用其反向的互联网域名来开始其包名 — 例如,com.example.mypackage用于由example.com的程序员创建的名为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 |
要为类型创建包,请将package语句作为包含类型(类、接口、枚举或注解类型)的源文件中的第一个语句。
要使用不同包中的公共类型,你有三种选择:(1)使用类型的完全限定名称,(2)导入类型,(3)导入类型为成员的整个包。
包的源文件和类文件的路径名称反映了包的名称。
你可能必须设置CLASSPATH,以便编译器和JVM可以找到类型的.class文件。
上一篇:泛型的限制 下一篇:使用包成员文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72951.html
Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...
使用包成员 组成包的类型称为包成员。 要从其包外部使用公共包成员,你必须执行以下操作之一: 通过其完全限定名称引用该成员 导入包成员 导入成员的整个包 每种情况都适用于不同的情况,如以下各节所述。 通过其完全限定名称引用包成员 到目前为止,本教程中的大多数示例都通过简单名称引用类型,例如Rectangle和StackOfInts,如果你编写的代码与该成员位于同一个包中,或者已导入该成员,则可以...
管理源文件和类文件 Java平台的许多实现依赖于分层文件系统来管理源文件和类文件,尽管Java语言规范不要求这样做,策略如下。 将类、接口、枚举或注解类型的源代码放在文本文件中,该文件的名称是类型的简单名称,其扩展名为.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...
Date-Time Java SE 8发行版中引入的Date-Time包java.time提供了全面的日期和时间模型,是在JSR 310:Date and Time API下开发的,尽管java.time基于国际标准化组织(ISO)日历系统,但也支持常用的全球日历。 此课程介绍了使用基于ISO的类来表示日期和时间以及操作日期和时间值的基本原理。 概述 时间似乎是一个简单的主题,即便是便宜的手表也能...
如何抛出异常 在捕获异常之前,某些代码必须抛出一个,任何代码都可能抛出异常:你的代码,来自其他人编写的包中的代码,例如Java平台附带的包或Java运行时环境,无论抛出什么异常,它总是使用throw语句抛出。 你可能已经注意到,Java平台提供了许多异常类,所有类都是Throwable类的后代,并且所有类都允许程序区分在程序执行期间可能发生的各种类型的异常。 你还可以创建自己的异常类来表示你编写的...
阅读 3242·2021-10-21 17:50
阅读 3254·2021-10-08 10:05
阅读 3380·2021-09-22 15:04
阅读 581·2019-08-30 14:00
阅读 1939·2019-08-29 17:01
阅读 1508·2019-08-29 15:16
阅读 3219·2019-08-26 13:25
阅读 852·2019-08-26 11:44