上一篇:Java学习之十一 Java流(Stream)文件(File)I/O
Java学习之十二 Java包(package)
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。
包的作用:
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java使用包package是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举和注释等。
包的语法格式:
package pkg1[.pkg2[.pekg3...]]
例如一个Somthiing.java文件,她的内容:
package net.java.util;
public class Somthing{
...
}
他的路径就是net/java/util/Sonthing.java
一个包(package)可以定义为一组项目联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和,命名空间管理的功能。
如:
- java.lang-打包基础的类
- java.io-包含输入输出功能的函数
创建包
- 创建包,取一个合适的名字;包的声明必须放在这个源文件的开头。
- 包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
- 如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中
import导入包
在java源文件中 import语句应该在package语句之后,所有的类定义之前。可以没有,也可以多条。
语法格式如下:
import package1[.package2...].(classname|*);
同一个包中的类使用可以忽略包名。
package的目录结构:
类放在包中会有两种主要的结果:
- 包名成为类名的一部分
- 包名必须与相应的字节码所在的目录结构相吻合
通常一个公司使用它互联网域名的颠倒形式来作为它的包名。如com.bimex.test
编译的时候,编译器为包中定义的每个类、接口等类型各创建一个不同的输出文件。输出文件就是这个类型的名字加上.class的扩展后缀。
编译后的.class文件应该和.java源文件一样,它们放置的目录应该跟包的名字对应起来。但是,并不要求.class文件的路径跟相应的.java的路径一样。可以分开源码和类的目录
<path-one>\src\com\bimex\test\Something.java
<path-two>\classes\com\bimex\test\Something.class
这样可以把类目录分享给其他人员,而不用暴露源码。
class path
类目录的绝对路径叫做class path。设置在系统变量CLASSPATH中。编译器和java虚拟机通过将package名字加到class path后来构造.class文件的路径。
<path-two>\classes是class path。package名字是com.bimex.test,而编译器和java虚拟机将在
<path-two>\classes\com\bimex\test中寻找.class文件
一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况。编译器和JVM查找当前目录。
JAR文件按包含java平台相关的类。所以他们的目录默认放在了class path中。
设置 CLASSPATH 系统变量
用下面的命令显示当前的CLASSPATH变量:
- Windows 平台(DOS 命令行下):C:\> set CLASSPATH
- UNIX 平台(Bourne shell 下):# echo $CLASSPATH
删除当前CLASSPATH变量内容:
- Windows 平台(DOS 命令行下):C:\> set CLASSPATH=
- UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH
设置CLASSPATH变量:
- Windows 平台(DOS 命令行下): C:\> set CLASSPATH=C:\users\jack\java\classes
- UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH