【Java专题】包和导入

包(package)是Java中用来组织类和接口的一种机制,可以将相关的类和接口放在同一个包中,形成一个命名空间,避免命名冲突。
包对于类,相当于文件夹对于文件,可以帮助我们更好地管理和维护代码。
包还可以提供访问控制,限制包内类的访问权限。

包的声明

  • 在Java源文件的第一行使用package关键字声明包名
  • 包名通常采用小写字母,并且可以使用点号.分隔多个层次的包名
  • 通常建议使用域名反转的方式来命名包,例如com.example.project

JDK内置的包

  • java.lang:包含Java语言的核心类,如String / Math / Integer / System / Thread 等,默认导入,无需显式导入
  • java.awt:包含Java的抽象窗口工具集(Abstract Window Toolkit),用来创建图形用户界面(GUI)组件,如JFrameJButton
  • java.net:包含网络相关的类,如URL、Socket等
  • java.io:包含输入输出相关的类,如文件操作、流等
  • java.util:包含常用的工具类,如集合框架、日期时间类等

导入类和包

  • 使用import关键字导入类或包,可以在代码中直接使用导入的类或包中的类,而无需使用全限定名
  • 导入单个类:import 包名.类名;
  • 导入整个包:import 包名.*;,会导入包中的所有类,但不包括子包中的类
  • 导入静态成员:import static 包名.类名.成员名;,可以直接使用静态成员而无需类名限定
  • 导入静态成员的整个类:import static 包名.类名.*;,会导入类中的所有静态成员
  • 如果导入的多个包中有同名的类,可以使用全限定名来区分,例如java.util.Datejava.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(); // name: Zhang san
}
}

导入包的写法

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(); // name: Zhang san
}
}