zoukankan      html  css  js  c++  java
  • Java基础07 包(转载)

    包(package)的目的就是为了更好的组织Java程序。
     

    包的建立

    包的建立非常简单。我们只用在Java程序的开始加入package就可以了。我们以Human类为例,将它放入包中:
    package com.vamei.society;
    public class Human{
        /**
         * constructor
         */
        public Human(int h){
            this.height = h;
            System.out.println("I'm born");
        }
        /**
         * accessor
         */
        public int getHeight(){
            return this.height;
        }
        /**
         * accessor
         */
        public void growHeight(int h){
            this.height = this.height + h;
        }
        private int height;
    }

    上面的第一行语句

    package com.vamei.society;

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

    包为Java程序提供了一个命名空间(name space)。 一个Java类的完整路径由它的包和类名共同构成,比如com.vamei.society.Human。相应的Human.java程序要放在 com/vamei/society/下。类是由完整的路径识别的,所以不同的包中可以有同名的类,Java不会混淆。比如 com.vamei.society.Human和com.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语句。

     如果包没有放在当前工作路径下, 我们在使用包时,需要通知Java。比如,我们将包放在/home/vamei/javapackage中,这样Human.class位于/home /vamei/javapackage/com/vamei/society/Human.class,而我们的工作路径为/home/vamei。这样,包就无法被找到。一个方法是在使用javac和java时,用-classpath说明包所在的文件夹路径,比如:

    $javac -classpath /home/vamei/javapackage:. TestAgain.java

    $java -classpath /home/vamei/javapackage:. TestAgain

    就是从/home/vamei/javapackage和工作路径(.)中寻找包。Java可以从/home/vamei/javapackage中可以找到Human类,从.中可以找到TestAgain类。

    另外也可以设置系统的CLASSPATH环境变量,将上述路径加入到该变量中,而不用每次都键入-classpath选项。

    类似于包的机制在其他语言中也很常见,比如Python中的import机制。它们都是为了更好的组织和使用已有的程序。利用包,我们可以比较容易的拓展Java程序,使用已有的Java程序库。注意到,包管理的是.class文件。Java号称"一次编译,处处运行" (Compile Once, run anywhere)。.class文件可以在任意装有Java虚拟机(JVM, Java Virtual Machine)的平台上运行,这帮助我们克服了系统差异造成的程序移植困难。

    系统之间的差异可以非常大。如果我们用C语言编写程序,需要将源程序在各个平台上重新编译,以适应不同的硬件条件。 Java虚拟机衔接了平台和Java宇宙,它构成了硬件和编程逻辑的中间层。JVM隐藏了硬件差异,提供给程序员一个“标准”的Java宇宙。 而.class文件可以看做这个Java宇宙中流通的通货。在JVM的基础设施下,加上包的管理辅助,Java程序实现了良好的可移植性 (portability)。

  • 相关阅读:
    06.章节页面接口开发
    05.课程主页面三个接口开发
    python高级(六)——用一等函数实现设计模式
    python高级(五)—— python函数(一等对象)
    python高级(四)—— 文本和字节序列(编码问题)
    python高级(三)—— 字典和集合(泛映射类型)
    python高级——目录
    python高级(二)—— python内置序列类型
    python高级(一)—— python数据模型(特殊方法)
    python实现百度地图API获取某地址的经纬度
  • 原文地址:https://www.cnblogs.com/airry66/p/3927753.html
Copyright © 2011-2022 走看看