Java中的包
包
包是为了解决类同名的问题而诞生的。在Java虚拟机执行的时候,jvm只看完整类名,因此只要包名不同,类就不同。
没有包名的class使用默认包。
我们需要按照包结构把Java文件组织起来。包名对应文件夹的名字。即所有Java文件对应的目录层次要和包的层次一致。
编译后的.class文件也需要按照包结构存放。
包作用域
位于同一个包的类,可以访问包作用域的字段和方法。不用public、protected、private修饰的字段和方法就是包作用域。
import关键字
使用一个类,可以有如下三种方式:
- 使用完整类名
- 使用import关键字单独导入该类
- 使用import关键字导入该类所在的包
推荐使用第二种。
还可以使用import关键字导入一个类的静态字段和方法。
package main;// 导入System类的所有静态字段和静态方法:
import static java.lang.System.*;public class Main {public static void main(String[] args) {// 相当于调用System.out.println(…)out.println("Hello, world!");}
}
当编译器遇到一个类名时,采用如下顺序确定该类:
-
使用完整类名时就直接根据完整类名查找该class
-
使用简单类名时,按下面的顺序依次查找:
- 查找当前package中是否存在该class
- 查找import的包中是否有该类
- 查找
java.lang
包中是否包含这个class
因此,编写class的时候,编译器会自动帮我们做两个import动作:
- 默认自动import当前package的其他class;
- 默认自动import java.lang.*。