Java 包
为了更好地组织和管理类,Java提供了包机制,用于区别类名的命名空间。
包的作用
- 把功能相似或相关的类或接口组织在同一包中,方便查找和使用;
- 包采用树形目录的存储方式,同一包中的类名不同,不同的包中的类名可以相同,包可以避免命名冲突;
- 包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
在Java中,包的使用需要用到包封装语句package
和包导入语句import
。
package语句
package
语句的含义是将源文件中定义的所有类放在同一文件夹中;格式如下:
package <包名>; |
<包名>
可以是字符串,也可以由多个字符串通过.
连接起来。
例如:
package nimitiz; |
注意事项:
- 包的声明只能位于Java源文件的第一行,每个源文件只能有一个包声明;
- 包名的所有字母必须小写,同时不能包含特殊字符;
- Java解释器会将包名中的
.
解释为目录分隔符(Windows下目录分隔符为\
); - 如果源文件中没有包声明,那么其中的类、接口等将被保存到一个默认的包
java.lang
中。
举个栗子
创建一个Java源文件demo0.java
package cn.nimitiz; //demo0.java的相对路径为./cn/nimitiz |
import语句
如果要使用某一包中的成员,需要在Java源文件中使用import语句
导入该包。
- 一个Java源文件中可以有多个
import语句
,必须写在package语句
之后,且在类定义之前; - 如果一个Java源文件没有使用
import语句
,编译器将自动引入默认的包java.lang
引入包中的某个类
例如,引入包cn.nimitiz
中的类demo0
:
import cn.nimitiz.demo0; |
引入包中的所有类
例如,引入包cn.nimitiz
中的所有类:
import cn.nimitiz.*; |
访问级别
Java中有四种访问级别:private
、default(默认方式,不带任何修饰符)
、protected
、public
。
private
:被其修饰的属性和方法只能被该类的对象访问,其子类不能访问,更不允许跨包访问default
:只允许在同一包中访问protected
:被其修饰的属性和方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问public
:被其修饰的类、属性和方法不仅可以跨类访问,而且允许跨包访问
同一类 | 同一包 | 不同包的子类 | 不同包的非子类 | |
---|---|---|---|---|
public | ✔ | ✔ | ✔ | ✔ |
protected | ✔ | ✔ | ✔ | ✘ |
默认方式(default) | ✔ | ✔ | ✘ | ✘ |
private | ✔ | ✘ | ✘ | ✘ |