Java基础知识总结二(2)


2、程序中包的使用

    Java中包的作用是帮助我们管理和组织类,避免类名的冲突。关于包的使用主要内容是package语句和import语句。

(1)package语句

   首先注意package语句必需写在.java文件的第一句,并且写在所有类的外面。

   例如,将之前得HelloWorld类放入到 p.test.practise包里面;

   代码如下:

   package p.test.practise;

   public class HelloWorld {
         public static void main(String args[]) {
              System.out.println("Hello World");
         }
   }

  然后,使用下面的编译命令进行编译,

      javac HelloWorld.java

  编译成功,在相应的文件夹目录下生成了HelloWorld.class文件,如下图所示

  

  然后,使用下面的命令运行HelloWorld.class文件

     java HelloWorld

  运行结果出现错误,如下图所示,

 原因在于将HelloWorld类放入了包里面。在将类放入包里面之后,必须使用类的全限定名运行HelloWorld.class文件,

 这里,全限定名的写法为包名加类名的写法

 所以,执行的命令应为,

   java p.test.practise.HelloWorld

 运行结果仍然出现错误,如下图所示,

 

  在这里,忘了最重要的一个知识点就是:类的包结构必须和文件夹的结构一样;

  所以,应该将HelloWorld.class文件放到 E:\exam文件夹里面的p文件夹里面的test文件夹里面的practise文件夹里面才可以,

  将HelloWorld.class文件放入到相应的文件夹E:\exam\p\test\practise后,

  重新运行上面的命令,运行成功,结果如下图所示,

  

  还有需要特别注意的一点是:当前路径必须在.class字节码文件包结构的上层目录,例如,在我的实验中,是E:\exam, 否则将会出现错误。

  这样做的原因是:在配置classpath环境变量时,classpath环境变量配置为“ . ” ,所以JVM会去当前目录下找.class文件,而JVM只能在.class字节码包结构的上层目录下才能找到。

  所以,在运行.class文件时必须以.class字节码文件包结构的上层目录作为上层目录。

 另外,也可以使用下面的javac命令的-d选项使得编译器在编译时自动生成和类结构相同的包的目录结构。用法如下:

   javac -d 目标目录 .java源文件名

 例如,执行下面的命令重新运行HelloWorld.java文件

  javac -d . HelloWorld.java

 需要注意的是-d和.java源文件名之间的点 “.” , 表示生成的.class文件的包的目录结构放在当前目录下。

运行后可以的到上面运行的同样的结果,如下图所示

  

(2)import语句

   使用import语句好像给本类中使用的外面的类提供了一个声明。import语句用于提高代码的清晰度和可读性,减少代码冗余。使用import语句应注意以下几点,

     1>import语句必须放在类的外部,且仅能在package语句的后面。

     2>如果需要用到某个包下面的多个类时,可以使用“ * ”通配符导入该包下面的所有类。但是,使用“ * ”通配符只能导入该包下面的类,而不能导入该包下面的子包中的       类,例如,

     可以使用import java.util.*; 导入util包中的所有类,但是不能导入util子包中的类;

     如果需要导入util子包中的类,应该带上子包名,例如,如果要导入util子包logging中中的所有类,import语句应为

     import java.util.logging.*;

    3>只能用统配符“ * ”导入一个包,而不能导入多个包。例如,不能用import java.*;或者import java.*.*;导入以java开头的所有包。

    4>还需要知道的一点是,java.lang包是编译器编译程序时默认自动导入的,在写import语句时,可以不用再写java.lang包的导入语句。