7.2 引用包

  接着上面的例子,将TestPackage.java调整为如下内容。

  1. package com.bd.test;
  2. public class TestPackage
  3. {
  4. public show()
  5. {
  6. System.out.println("package com.bd.test");
  7. }
  8. }

  假设在当前目录(如图7.1所示的example1目录)下新建了一个Java程序TestImport1.java,在程序中需要新建一个TestPackage类的对象,并调用该对象的show()方法,代码如下。

  1. class TestImport1
  2. {
  3. public static void main(String[] args)
  4. {
  5. TestPackage tp = new TestPackage();
  6. tp.show();
  7. }
  8. }

  编译时会提示错误,找不到TestPackage类。其原因在于,TestPackage这个类已经被打包到com\bd\test目录下,如果在TestImport1代码中不做任何操作,是找不到TestPackage类的。

7.2.1 完整类名引用类

  引用不同包中的类有两种方法,其中一种非常直观的方法就是使用完整类名引用类。例如,将上面TestImport1类修改为如下的内容。

  1. class TestImport2
  2. {
  3. public static void main(String[] args)
  4. {
  5. //使用完整包名引用包
  6. com.bd.test.TestPackage tp = new com.bd.test.TestPackage();
  7. tp.show();
  8. }
  9. }

  编译并运行(运行前要将EditPlus的运行环境调整回本章之前的状态)程序,会正常地在控制台输出“package com.bd.test”。

7.2.2 导入包

  使用完整类名引用类的方法虽然直观,但书写的内容多,且当使用的类比较多时,编辑和阅读都非常困难。接下来学习的是采用导入包的形式引用类,导入包的语法形式如下。

  1. import 包名.类名;

  这里的包名、类名既可以是JDK提供的包和类的名称,也可以是用户自定义的包名和类名。

  如果要使用一个包中的某些类,可以使用import 包名.;的形式导入这个包中所有的类。不过,包的导入不是迭代的,就是说当导入java.util.时,只会导入java.util包中所有的公共类,不会导入这个包下其他文件夹中的类。

  另外,import语句需要放在package语句后,在类定义之前。

  例如,现在需要通过Java程序求出64的平方根。通过查询JDK API,找到java.lang.Math类有一个sqrt(double a)方法,返回a的平方根,则具体实现代码如下。

  1. import java.lang.Math; //导入java.lang.Math类,可以省略
  2. class TestImport3
  3. {
  4. public static void main(String[] args)
  5. {
  6. System.out.println("64的平方根为:" + Math.sqrt(64)); //使用Math类的sqrt方法
  7. }
  8. }

  编译、运行程序,输出正确结果:8.0。

  如果删除import java.lang.Math;这条语句后重新编译、运行,发现程序仍然可以正确输出8.0的结果。为什么呢?其因为在于,对于java.lang包中的所有公共类,系统都默认导入到程序中,不需要程序员显式地导入。

  假设现在需要输出当前的日期和时间。通过查询JDK API,找到java.util.Date类有一个toString()方法,按一定的格式输出日期和时间,则具体实现代码如下。

  1. import java.util.*; //导入java.util包中的所有公共类,不可以省略
  2. class TestImport4
  3. {
  4. public static void main(String[] args)
  5. {
  6. Date now = new Date();
  7. System.out.println("现在的日期为:" + now.toString()); //使用Date类的toString方法
  8. }
  9. }

  程序运行结果如图7.6所示。

7.2 引用包 - 图1
图7.6 导入包输出日期

  本小节的两个例子都是导入了JDK类库中的包,接下来修改7.2.1节中使用“完整类名引用类”的例子,采用导入包的形式引用类,具体代码如下。

  1. import com.bd.test.*; //导入com.bd.test中所有的公共类
  2. class TestImport5
  3. {
  4. public static void main(String[] args)
  5. {
  6. TestPackage tp = new TestPackage(); //直接使用导入的类
  7. tp.show();
  8. }
  9. }