作者: SingleDiego | 来源:发表于2018-03-22 22:15 被阅读6次

我们已经写了一些 Java 程序。之前的每个 Java 程序都被保存为一个文件,比如 Test.java。随后,该程序被编译为 Test.class。我们最终使用 $java Test 来运行程序。

然而,在一个正常的 Java 项目中,我们往往需要编写不止一个 .java 程序,最终的 Java 产品包括了所有的 Java 程序。因此,Java 需要解决组织 Java 程序的问题。包(package)的目的就是为了更好的组织 Java 程序。




包的建立

包的建立非常简单。我们只用在 Java 程序的开始加入 package 关键字就可以了。我们以 Human 类为例,将它放入包中:

package com.vamei.society;

public class Human
{
    public Human(int h)
    {
        this.height = h;
        System.out.println("I'm born");
    }

    public int getHeight()
    {
        return this.height;
    }

    public void growHeight(int h)
    {
        this.height = this.height + h;
    }

    private int height;
}

上面的第一行语句:

package com.vamei.society;

表示该程序在 com.vamei.society 包中。

com.vamei 表示包作者的域名 (很可惜,这个域名已经被别人注册了,所以只起演示作用)。Java 要求包要有域名前缀,以便区分不同作者。society 为进一步的本地路径名。com.vamei.society 共同构成了包的名字。

包为Java程序提供了一个命名空间(name space)。一个 Java 类的完整路径由它的包和类名共同构成,比如 com.vamei.society.Human。相应的 Human.java 程序要放在 com/vamei/society/ 下。

类是由完整的路径识别的,所以不同的包中可以有同名的类,Java 不会混淆。比如 com.vamei.society.Humancom.vamei.creature.Human 是两个不同的类。

再看一个细节。Human 类是 public 的,其构造方法也是 public 的,所以任意其他对象都可以调用该类。我们之前说过,一个 Java 文件中只能有一个 public 的类,该类要和 .java 文件同名。

一个类可以没有 public 关键字,它实际上也表示一种权限:该类在它所在的包中可见。也就是说,包中的其他 Java 程序可以访问该类。这是 Java 中的默认访问权限。

同样,对象的成员也可以是默认权限(包中可见)。比如我们去掉 getHeight() 方法前面的 public 关键字。




包的调用

我们只需要将 Human.java 编译的 Human.class 放入相应的文件夹就可以了。比如,我将 Human.class 放入 com/vamei/society/ 中。实际上,你也可以把 .java 文件放入相应路径,Java 会在使用时自动编译。

如果整个包(也就是com文件夹)位于当前的工作路径中,那么不需要特别的设置,就可以使用包了,比如下面的 TestAgain.java

这样组织文件路径
import com.vamei.society.*;

public class TestAgain
{
    public static void main(String[] args)
    {
        Human aPerson = new Human(180);
        System.out.println(aPerson.getHeight());
    }
}

import 用于识别路径。利用 import 语句,我们可以引入相应路径下的类。* 表示引入 society 文件夹下的所有类。在 TestAgain 中,我们直接使用了 Human 类。

我们也可以提供类的完整的路径。这可以区分同名但不同路径的类,比如:

public class TestAgain
{
    public static void main(String[] args)
    {
        com.vamei.society.Human aPerson = 
                  new com.vamei.society.Human(180);
        System.out.println(aPerson.getHeight());
    }
}

由于我们提供了完整的类路径,所以不需要使用 import 语句。

相关文章

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • Golang-基础包

    math包 strconv包 json包 time包

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • npm使用手册

    目录 # 包的管理# ----》创建包# ----》安装包# ----》删除包# ----》发布包# ----》更...

  • 生信小组DAY6-JANE

    R包R语言的包,常常听到各种名字,扩展包、程序包、软件包、函数包、算法包……不如单名一个“包(Package)”字...

  • “包治百病”却拯救不了你的“烂人生”

    1. 包个包个包包那是什么包 包个包个包包这个害人包 一包一包一包包包催人傻 妙龄青春女孩已经犯错了!!! 包是什...

  • linux 指南II 软件安装

    包全名与包名包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径包名: 操作已经安装的软件包时,使用包...

  • linux 安装命令管理

    包全名与包名包全名:操作的包是没有安装的软件包时,使用包全名而且要注意路径包名: 操作已经安装的软件包,使用包名 ...

  • 构建CentOS httpd RPM包

    安装依赖包 下载apr及httpd源码包 编译apr rpm包 安装apr包 编译http包 安装http包

  • 全网最详细的游戏包解读:小白也能看懂

    一.游戏包的概念: 目前的游戏包大部分是大家所熟知的下载包,像官方包,企业包(官网包),吸量包,联运包 当然现在有...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/xlbaqftx.html