package
存放功能相关或逻辑相关的一组类,用于解决类的命名冲突、类文件管理等。若希望把某个类放在指定的包中,则应在该java源文件中的第一行添加如下代码:
//packageName为包名
package packageName;
此时该类的完整类名应该是包名和该类的文件名组合。
下面介绍package关键问题,先给出简单代码:
package sywyg;
public class Hello{
public static void main(String[] args){
System.out.println("hello,sywyg!");
}
}
编译java程序
在当前文件夹中使用下列命令编译该文件:
javac -d . Hello.java
-d选项表示编译生成的class文件存放的位置,这里选择(.)当前文件夹,但是编译之后没保存在当前文件夹,而是多出来一个sywyg文件夹,class在此文件夹中。这是与java本身设计相关:位于包中的类在文件系统中也必须有与包名层次相同的目录结构。(这里要注意的是:若不适用-d选项则class仍然保存在当前目录下,而不是sywyg,而且无法运行该class文件。)
执行java程序
接着在当前文件中执行下列命令运行class文件:
java sywyg.Hello
当JVM装载sywyg.Hello时,依次搜索CLASSPATH中指定的路径,是否有sywyg,然后在sywyg文件夹中搜索是否有Hello.class文件(即按与包层次结构对应的目录结构搜索class文件)。注意同一个包中的类不必位于相同的目录下(包对应的目录结构需一样)。
一般来说应该报java源文件放在和包名一致的目录结构下,这样方便管理。
注意:为java源文件添加包必须通过代码添加而仅仅通过创建相同的目录结构不行。java包机制需两方面的保证:
- 源文件使用package语句指定包名;
- class文件放在对应的路径下(通过编译时自动存放在其中)。
包命名
一般包名需全部小写,且为了更好管理,通常使用用公司域名的倒写。一个源文件中只能指定一个包。若要使用一个包中的类必须要写完整的类名,但是这样太繁琐,因此可以通过import语句简化。
import
假设要一个类中需要上面的Hello类,则需要在该类中添加如下代码:
//可以使用sywyg.*导入所有的类(*只能代表类)
import sywyg.Hello;
通过import语句可以仅使用类名而不用包名,达到简化代码的作用。当然若使用全称则不需import语句。
- 默认情况下,java程序导入java.lang包中的所有类。
- 要注意重名的类问题。
import static
import static 语句用于导入指定类的类成员变量、方法。代码格式如下:
//导入单个类变量或类方法
import static sywyg.Hello.main;
//导入类的所有类变量和类方法
import static sywyg.Hello.*;
一句话归纳:使用import语句可以省略包名,而使用import static语句则连类名都可以省略。
常用包
java的核心类都放在java以及其子包下,java扩展的许多类都放在javax包以及其子包下。这些实用类也就是平时经常说的API(应用程序接口)。现在只简单介绍一下,后续再仔细分析。
- java.lang:这个包下包含java语言的核心类,如String、Math、System和Thread类等,使用这个包下的类无须使用import语句导入,系统会自动导入这个包下的所有类。
- java.util:包含了java大量工具类/接口和集合框架/接口,例如Arrays和List、Set等。
- java.net:包含了一些java网络编程相关的类和接口。
- java.io:这个包下包含了一些java输入/输出编程的相关类/接口。
- java.text:这个包下包含了一些java格式化相关类
- java.sql:这个包下包含了java进行JDBC数据库编程的相关类/接口
参考文献:
李刚疯狂java系列