包(package)是Java中用来组织类和接口的一种机制,可以将相关的类和接口放在同一个包中,形成一个命名空间,避免命名冲突。
包对于类,相当于文件夹对于文件,可以帮助我们更好地管理和维护代码。
包还可以提供访问控制,限制包内类的访问权限。
包的声明
- 在Java源文件的第一行使用
package关键字声明包名
- 包名通常采用小写字母,并且可以使用点号
.分隔多个层次的包名
- 通常建议使用域名反转的方式来命名包,例如
com.example.project
JDK内置的包
java.lang:包含Java语言的核心类,如String / Math / Integer / System / Thread 等,默认导入,无需显式导入
java.awt:包含Java的抽象窗口工具集(Abstract Window Toolkit),用来创建图形用户界面(GUI)组件,如JFrame、JButton等
java.net:包含网络相关的类,如URL、Socket等
java.io:包含输入输出相关的类,如文件操作、流等
java.util:包含常用的工具类,如集合框架、日期时间类等
导入类和包
- 使用
import关键字导入类或包,可以在代码中直接使用导入的类或包中的类,而无需使用全限定名
- 导入单个类:
import 包名.类名;
- 导入整个包:
import 包名.*;,会导入包中的所有类,但不包括子包中的类
- 导入静态成员:
import static 包名.类名.成员名;,可以直接使用静态成员而无需类名限定
- 导入静态成员的整个类:
import static 包名.类名.*;,会导入类中的所有静态成员
- 如果导入的多个包中有同名的类,可以使用全限定名来区分,例如
java.util.Date和java.sql.Date
代码示例
定义示例包
1 2 3 4 5 6 7 8 9 10 11 12
| package study.ghr.pk2;
public class TestUser { String name; public void hello() { System.out.println("name: " + name); }
public TestUser(String name) { this.name = name; } }
|
不导入包的写法
1 2 3 4 5 6 7 8
| package study.ghr.pk1;
public class TestPackage { public static void main(String[] args) { study.ghr.pk2.TestUser u = new study.ghr.pk2.TestUser("Zhang san"); u.hello(); } }
|
导入包的写法
1 2 3 4 5 6 7 8 9
| package study.ghr.pk1; import study.ghr.pk2.TestUser;
public class TestPackage { public static void main(String[] args) { TestUser u = new TestUser("Zhang san"); u.hello(); } }
|