作者: 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 语句。

    相关文章

      网友评论

          本文标题:

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