包类似于操作系统中的文件夹
包的作用:
1 包可以提供文件的分类管理、
2 包可以提供独立的命名空间,可以解决命名上的冲突
3 包可以提供访问权限的控制。(可以控制一个类型在保外是否可见,从而实现更好的封装性)
包的声明: package 包名;
package 包名.子包名;
以前的类没有显示声明包,则类处于无名包(默认包)之中。
声明包的语法要求:
1. 声明位置: 包的声明语句必须是源文件中的第一条有效语句
2. 语句数量: 一个源文件中最多只能存在一条包声明语句。
当声明包后,编译与运行要发生一些细微的调整:
javac 源文件.Java ==> javac -d . 源文件.java
java 字节码文件 ==> java 包名.类名 (全限定名)
如果两个类在同一个包内,可以通过简单名来访问本包中的基本类型
如果两个类不在同一个包中,则不能通过简单名访问包外的类型
如果需要访问包外的类型,可以采用
1 使用类的全限定名
2 使用import 导入类型
import 类的全限定名;
将包外的类型导入到当前的命名空间当中,当导入成功后,我们就可以使用类的简单名进行访问。
import的语法:
语句位置:import语句必须出现在包声明语句之后,类声明之前
语句数量:可以是0条到多条
可以通过*来导入一个包中的所有类型,但是并不包括子包中的类型
import p.*
编译器会隐式导入java.lang包中所有的类型。
import java.lang . *
import 与import static 二者都是导入
import 是导入包中所声明的类型
import static 导入的是包中类型所声明的静态成员。
当导入之后,我们就可以直接使用这些成员,就像我们当前类自己声明的一样
访问修饰符用来声明访问权限,访问权限由高到低位:
public 共有权限,全部对外开放
protected 保护权限,对本包开放,对包外的子类开放。
不加修饰符限定 默认权限,对本包开放。
private 私有权限,仅对本类开放