Java逍遥游记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 包声明语句

在实际生活中,包可以用来分门别类地存放各种物品,例如钱放在钱包里,重要物品放在手提包里,非重要物品放在行李包里。当一个Java程序包含许多类时,为了便于管理和组织这些类,也可以把它们分门别类地放在不同的“包”中。

尽管悟空才定义了屈指可数的几个类,但是他高瞻远瞩,考虑到以后还会定义越来越多的类,为了便于管理这些类,悟空打算把Monkey类放到hgs.angel包(hgs是huaguoshan的缩写)中。悟空用“package”关键字来声明Monkey类位于hgs.angel包中:

                package hgs.angel;//包声明语句
                public class Monkey{……}

在一个Java源文件中,最多只能有一个package语句,但package语句不是必需的。如果没有提供package语句,就表明Java类位于默认包中,默认包没有名字。第1章定义的Monkey类就位于默认包中。

package语句必须位于Java源文件的第一行(忽略注释行)。例如,以下3段代码均表示Tester.java源文件的代码,其中第一段和第二段是合法的,而第三段会导致编译错误。第一段和第二段代码表明,Tester类和Sample类都位于mypack包中。

第一段代码(合法):

                /** 注释行 */
                package mypack;
                public class Tester{……}
                class Sample{……}

第二段代码(合法):

                package mypack;
                public class Tester{……}
                class Sample{……}

第三段代码(非法):

                public class Tester{……}
                package mypack; //包声明语句没有位于Java源文件的第一行
                class Sample{……}

1.包的命名规范

包的名字作为标识符,通常采用小写,包名中可以包含以下信息:

● 类的创建者或拥有者的信息。

● 类所属的软件项目的信息。

● 类在具体软件项目中所处的位置。

例如,假定有一个SysContent类的完整类名为com.abc.netstore.common.SysContent类,其中“com.abc.netstore.common”是包的名字。从这个完整类名中可以看出,SysContent类由ABC公司开发,属于netstore项目,位于netstore项目的common子包中。

包的命名规范实际上采用了Internet网上URL命名规范的反转形式。例如,在Internet上网址的常见形式为:http://netstore.abc.com,而Java包名的形式则为:com.abc.netstore。

值得注意的是,Java语言并不强迫包名必须符合以上规范。不过,以上命名规范能帮助应用程序确立良好的编程风格。

Tips

在本书中,规则和规范有着不同的含义。规则是必须遵守的,否则会导致编译错误或运行时错误。规范是推荐遵守的,有助于确立良好的编程风格。

2.JDK提供的Java基本包

悟空当年在西天取经路上之所以能克服重重困难,不仅因为他自身本领高强,还归功于他左右逢缘,善于求人帮忙的智慧。如来佛祖、观音菩萨、铁扇公主和东海龙王等,都在关键时刻帮助过悟空。同样,每一个Java类如果孤军奋战,肯定能力有限,如果能善于求助其他Java类,就会如虎添翼,顺利完成复杂的任务。

事实上,每个Java类都不是孤零零存在的,它既可以访问用户定义的其他Java类,还可以访问JDK提供的一些Java基本包中的类。JDK中的Java基本包主要包括:

● java.lang包:包含线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String)等,这些类是编写Java程序经常用到的。这个包是Java虚拟机自动引入的包,也就是说,即使程序中没用提供“import java.lang.*”语句,这个包也会被自动引入。

● java.awt:抽象窗口工具箱包,awt是“Abstract Window Toolkit”的缩写,这个包中包含了用于构建GUI图形用户界面的类及绘图类。

● java.io包:输入/输出包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类),以及文件输出流类(FileOutputStream)等。

● java.util包:提供一些实用类,如日期类(Date)和集合类(Collection)等。

JDK的所有包中的类构成了Java类库,或者叫做JavaSE API。JavaSE API为用户自定义的Java类提供了强大的后援。用户创建的Java程序都依赖于JavaSE API。例如在Monkey类中,用到了java.lang包中的System类和String类。由于java.lang包是被自动引入的,所以在Monkey类中没有提供“import java.lang.*”语句:

                public class Monkey{
                  String name; //String类位于java.lang包中

                  public Monkey(){}

                  public Monkey(String name){  //String类位于java.lang包中
                    this.name=name;
                  }

                  public void speak(){
                    System.out.println("大家好,我是"+name); //System类位于java.lang包中
                  }
                }