包的作用
- 解决类同名的问题
- 便于管理:类多了放在不同的包下面
- 便于访问控制:同一个包下面的类可以直接使用不需要引入
声明包
- 必须将这个包的声明放在这个源文件的开头。
- 包名的命名规则:
一般使用组织的反向域名:fanyi.baidu.com
例如:
package animals;
/* 文件名 : Animal.java */
public class Animal{
}
导入包
import 包名.类名;
import 包名.*;
例如:
import animals.Animal
常用的java包:
java.lang
java核心的包,改包默认自动导入不需要显式引入。如:String、System、Math都在这个包里
java.util
包含常用的工具类,如Scanner、Arrays等
java.io
包含输入输出类
java.sql
包含数据库相关类
java.net
包含网络相关类
java.awt
包含图像窗口相关类
注意:建一个类的时候一定要建在一个包内,否则你的类会放在一个默认包(default package)里,这是不好的,会导致改类无法被引用。
package 的目录结构
// 文件名: Runoob.java
package com.runoob.test;
public class Runoob {
}
class Google {
}
$javac -d . Runoob.java
编译后的文件:
.\com\runoob\test\Runoob.class
.\com\runoob\test\Google.class
如何导入呢?你可以像下面这样来导入所有 \com\runoob\test\ 中定义的类、接口等:
import com.runoob.test.*;
分开组织
这样的话我们的编译文件和源文件是在同一层级的,这样没有区分,所以我们一般会将源文件和字节码文件分开:
<path-one>\sources\com\runoob\test\Runoob.java
<path-two>\classes\com\runoob\test\Google.class
类目录的绝对路径叫做 class path。设置在系统变量 CLASSPATH 中。编译器和 java 虚拟机通过将 package 名字加到 class path 后来构造 .class 文件的路径。
\classes 是 class path,package 名字是 com.runoob.test,而编译器和 JVM 会在 \classes\com\runoob\test 中找 .class 文件。
一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况下,编译器和 JVM 查找当前目录。JAR 文件按包含 Java 平台相关的类,所以他们的目录默认放在了 class path 中。
设置 CLASSPATH 系统变量
1、显示当前的CLASSPATH变量:
Windows 平台(DOS 命令行下):C:> set CLASSPATH
UNIX 平台(Bourne shell 下):# echo $CLASSPATH
2、删除当前CLASSPATH变量内容:
Windows 平台(DOS 命令行下):C:> set CLASSPATH=
UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH
3、设置CLASSPATH变量:
Windows 平台(DOS 命令行下): C:> set CLASSPATH=C:\users\jack\java\classes
UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH
参考资料:
https://www.runoob.com/java/java-package.html
https://www.runoob.com/w3cnote/java-compile-with-package.html