7.2 引用包

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

package com.bd.test;

public class TestPackage

{

    public show() 

    {

        System.out.println("package com.bd.test");

    }

}
copy

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

class TestImport1 

{

    public static void main(String[] args) 

    {

        TestPackage tp = new TestPackage();

        tp.show();

    }

}
copy

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

7.2.1 完整类名引用类

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

class TestImport2 

{

    public static void main(String[] args) 

    {

        //使用完整包名引用包

        com.bd.test.TestPackage tp = new com.bd.test.TestPackage();

        tp.show();

    }

}
copy

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

7.2.2 导入包

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

import 包名.类名;
copy

  这里的包名、类名既可以是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方法

    }

}
copy

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

  如果删除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方法

    }

}
copy

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

图7.6 导入包输出日期

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

import com.bd.test.*;                                                  //导入com.bd.test中所有的公共类

class TestImport5 

{

    public static void main(String[] args) 

    {

        TestPackage tp = new TestPackage();     //直接使用导入的类

        tp.show();

}

}
copy