Java™ 教程(建立和使用包)

本课程解释了如何将类和接口捆绑到包中,如何使用包中的类,以及如何安排文件系统以便编译器能够找到源文件。java

建立和使用包

为了使类型更易于查找和使用,避免命名冲突和控制访问,程序员将相关类型的组捆绑到包中。程序员

定义:包是一组提供访问保护和名称空间管理的相关类型,请注意,类型引用类、接口、枚举和注解类型,枚举和注解类型分别是特殊的类和接口,所以在本课中一般将类型简称为类和接口。

做为Java平台一部分的类型是按功能捆绑类的各类包的成员:基础类在java.lang中,用于读写的类(输入和输出)在java.io中,依此类推,你也能够将类型放入包中。编程

假设你编写了一组表示图形对象的类,例如圆形、矩形、线条和点,你还能够编写一个Draggable接口,若是类可使用鼠标拖动,则能够实现这个接口。segmentfault

//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语句放在每一个源文件的顶部,该文件包含要包含在包中的类型(类、接口、枚举和注解类型)。code

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语句,则类型最终会出如今未命名的包中,通常来讲,一个未命名的包只适用于小型或临时应用程序,或者刚刚开始开发过程,不然,类和接口属于命名包。get

命名包

随着全世界程序员使用Java编程语言编写类和接口,不少程序员可能会对不一样类型使用相同的名称,事实上,前面的例子就是这样:当java.awt包中已经有一个Rectangle类时,它定义了一个Rectangle类,尽管如此,编译器容许两个类在不一样的包中具备相同的名称。每一个Rectangle类的彻底限定名称包括包名称,也就是说,graphics包中Rectangle类的彻底限定名称是graphics.Rectanglejava.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文件。


上一篇:泛型的限制

下一篇:使用包成员

相关文章
相关标签/搜索