7.1 Java包
在计算机中存放了若干类型的文档,为了管理方便,操作系统采用了树形结构的文件夹形式存放这些文档,并对文档进行管理,可以将文档分门别类地存储,易于查找,解决了文件名冲突的问题。
为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的类都属于一个默认的无名包。
Java中的包一般都包含功能相关的类。例如,Java中通用的工具类,一般都放在java.util包中。
-
提供了类似于操作系统树形文件夹的组织形式,能分门别类地存储、管理类,易于查找并使用类。
-
解决了同名类的命名冲突问题。
-
包允许在更广的范围内保护类、属性和方法。
包的使用
程序员可以使用package关键字指明源文件中的类属于哪个具体的包,包的语法形式如下。
package pkg1[.pkg2[.pkg3…]];
程序中如果有package语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。另外,一个文件中最多只能有一条package语句。
包的名字有层次关系,各层之间以点分隔,包层次必须与Java开发环境文件系统的层次结构相同。通常包名全部用小写字母,这与类名以大写字母开头且各单词的首字母亦大写的命名约定有所不同。关于包的命名,现在使用得最多的规则是使用internet域名,并将其中的元素颠倒过来。例如abc公司的域名为www.abc.com , 该公司开发部门正开发了一个叫fly的项目,在这个项目中有一个工具类的包,则这个工具包的包名可以为:com.abc.fly.tools
package com.abc.fly.tools;//声明包
JDK中的包
JDK的类库被分成许多包,这些包是分层次组织的,就像在硬盘上嵌套有各级子目录一样。最高一级的包名是java和javax,其下一级的包名有lang、util、net、io等。
-
java.lang:利用Java编程语言进行程序开发的基础类,例如String、Math、Integer、System和Thread等。
-
java.util:Java工具类,包含对集合的操作、事件模型、日期和时间设置、国际化和各种实用工具类。
-
java.io:通过数据流、序列化和文件系统提供系统输入和输出。
-
java.net:为实现网络应用程序而提供的类。
-
java.awt:包含用于创建用户界面和绘制图形图像的类。
7.2 引用包
完整类名引用类
引用不同包中的类有两种方法,其中一种非常直观的方法就是使用完整类名引用类。
com.bd.test.TestPackage tp = new com.bd.test.TestPackage();
导入包
使用完整类名引用类的方法虽然直观,但书写的内容多,且当使用的类比较多时,编辑和阅读都非常困难。
import 包名.类名;
这里的包名、类名既可以是JDK提供的包和类的名称,也可以是用户自定义的包名和类名。
如果要使用一个包中的某些类,可以使用import 包名.*
;的形式导入这个包中所有的类。不过,包的导入不是迭代的,就是说当导入java.util.*
时,只会导入java.util包中所有的公共类,不会导入这个包下其他文件夹中的类。
另外,import语句需要放在package语句后,在类定义之前。
例如,现在需要通过Java程序求出64的平方根。通过查询JDK API,找到java.lang.Math类有一个sqrt(double a)方法,返回a的平方根,则具体实现代码如下。
import java.lang.Math; //导入java.lang.Math类,可以省略
class TestImport3{
public static void main(String[] args) {
System.out.println("64的平方根为:" + Math.sqrt(64)); //使用Math类的sqrt方法
}
}
如果删除import java.lang.Math;这条语句后重新编译、运行,发现程序仍然可以正确输出8.0的结果。因为对于java.lang包中的所有公共类,系统都默认导入到程序中,不需要程序员显式地导入。
假设现在需要输出当前的日期和时间。通过查询JDK API,找到java.util.Date类有一个toString()方法,按一定的格式输出日期和时间,则具体实现代码如下。
import java.util.*; //导入java.util包中的所有公共类,不可以省略
class TestImport4{
public static void main(String[] args) {
Date now = new Date();
System.out.println("现在的日期为:" + now.toString()); //使用Date类的toString方法
}
}