有些人写了一阵子Java,可是对于Java 的package 跟import 还是不太了解。很多人以为原始码.java 文件中的import 跟C/C++ 的#include 相似,实际上这是错误的观念。

  让我们先了解一下,Java 的package 到底有何用处。其实,package 名称就像是我们的姓,而class 名称就像是我们的名字。package 名称可以有很多,就好像是复姓。比如说java.lang.String,就是复姓java.lang,名字为String 的类别。

 (1)Java 会使用package 这种机制的原因也非常明显,就像我们取姓名一样,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生数据,或是同学彼此之间的称呼,就会发生很大的困扰。可是问题来了,因为很多套件的名称非常的长,在写程序时,会多打好多字,花费不少时间,比如说:

java.io.InputStream is = java.lang.System.in; 
java.io.InputStreamReader isr= new java.io.InputStreamReader(is); 
java.io.BufferedReader br = new java.io.BufferedReader(isr);

实在是不美观又麻烦。于是,Sun 想了一个办法,就是import。这个import 就是在程序一开头的时候,先说明程序中会用到那些类别的简称。首先,在档案开头写:

import java.lang.System; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.BufferedReader;  

这几行说明了这四个姓名的类别,在程序中只用名字来称呼,所以当程序中提到System 就是指java.lang.System,而InputStream 就是指java.io.InputStream,依此类推。于是原来的程序就变成:

InputStream is= System.in; 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr);

(2)这样看起来是不是清爽多了呢?如果这些类别用的次数很多,那就更能体会到import 的好处了。可是这样还是不够,还是会有人觉得打太多 import 了也很浪费时间,于是 Sun 又提供了一个方法:

   import java.lang.*;
   import java.io.*;

意思就是,等一下程序中提到的没有姓的类别,不是姓java.lang,就是姓java.io,如果这两个里面有同样名字的类别,而不幸的你又只用名字称呼这个类别,那编译器仍然会跟你抱怨,因为它还是不知道你说的这个类别指那一个姓的类别。

        为甚么我一开始说import 跟 #include 不同呢?因为import 的功能到此为止,它不像#include 一样,会将档案内容载入进来。import 只是请编译器帮你打字,让编译器把没有姓的类别加上姓,并不会把别的文件的程式码写进来。

        另外,Sun 还是帮我们多偷了一点懒。因为java.lang 这个套件实在是太常太常太常用到了,几乎没有程序不用它的,所以不管你有没有写 import java.lang;,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去 java.lang 里面找找看,所以我们就不用特别去import java.lang 了。

=================================Java Application与Java Applet===================================================

        Java语言是一种半编译半解释的语言。Java的用户程序分为两类:Java Application和Java Applet。这两类程序在组成结构和执行机制上都有一定的差异,主要体现在以下几方面:
(1)运行方式不同。Java Application是完整的程序,可以独立运行;Java Applet程序不能单独运行,它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行。
(2)运行工具不同。Java Application程序被编译以后,用普通的Java解释器就可以使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才能执行。
(3)程序结构不同。每个Java Application程序必定含有一个并且只有一个main方法,程序执行时,首先寻找main方法,并以此为入口点开始运行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立运行的原因。尽管Applet没有含main方法的主类,但Applet一定有一个从 java.applet.Applet派生的类,它是由Java系统提供的。
(4)受到的限制不同。Java Application程序可以设计成能进行各种操作的程序,包括读/写文件的操作,但是 Java Applet 对站点的磁盘文件既不能进行读操作,也不能进行写操作。然而,由于Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功能,不但可以显示文本信息,而且还可以有各种图片效果和动态图形效果,从而使页面显得生动美丽;另外,Applet使Web页面增加了按钮等功能,从而增加了交互性。