1. 什么是包(Package)?
在Java中,包(package)是一种用来组织类和接口的机制,它可以帮助我们避免类名冲突,并且提高代码的可维护性和模块化。
包的作用包括:
- 避免命名冲突:通过包名来区分相同名字的类。例如,你可以在不同的包中定义两个名称相同的类。
- 更好的组织代码:将相关的类放在同一个包中,可以让代码更有条理。
- 访问控制:配合访问限定符使用,可以限制类、方法、变量的访问范围。
2. 如何创建包(Package)
1) 声明包名
在Java源文件中,包名需要在文件的第一行通过 package
关键字声明。
示例:创建包
package com.example.utils;
public class UtilityClass {
public void printMessage() {
System.out.println("Hello from UtilityClass");
}
}
2) 包的物理表示
- 包在文件系统中被表示为一个目录。例如,上述包
com.example.utils
对应的目录结构如下:com/ example/ utils/ UtilityClass.java
- Java类文件(
.java
文件)要放置在对应的包目录下。
3. 导入包(Import)
当我们想要在一个类中使用另一个包中的类时,需要通过 import
关键字来导入包中的类。
1) 导入单个类
如果你只需要导入某个包中的某一个类,可以这样做:
import com.example.utils.UtilityClass;
public class MainClass {
public static void main(String[] args) {
UtilityClass util = new UtilityClass();
util.printMessage();
}
}
2) 导入整个包中的所有类
你也可以使用通配符 *
来导入包中的所有类:
import com.example.utils.*;
public class MainClass {
public static void main(String[] args) {
UtilityClass util = new UtilityClass();
util.printMessage();
}
}
3) java.lang 包的特殊性
java.lang
包是Java默认提供的包,其中包括了很多常用的类(如 String
, Integer
, System
),这些类是自动导入的,无需显式使用 import
。
4. 包的层次结构与命名
Java的包可以有多层结构,使用**点号(.)**来区分层级,类似于目录结构。
示例:
package com.mycompany.project.module;
public class MyClass {
public void doSomething() {
System.out.println("Doing something...");
}
}
对应的文件结构为:
com/
mycompany/
project/
module/
MyClass.java
命名规范:
- 包名一般全小写,且以公司域名的反转形式开头。例如:
com.example.project
。 - 这种方式可以避免类名冲突,并且让代码更加有组织性和可维护性。