package(1):
--所有的Java类都是放置在同一个目录下面的,因此类之间的相互调用无需显式声明调用。
注意:(1)同一个目录下,两个类的名字不能相同
(2)文件过多,查找和修改都不易,且容易出错
--Java支持多个目录放置Java文件,并且通过package / import / classpath / jar等机制配合使用,可以支持跨目录放置和调用Java类
package(2):
--package包,和C++中的namespace类似
--在Java类文件的第一句话给出包的名称
也就是说,在目录cn.edu.ecnu下有个类文件PackageExample.java
--类全称 cn.edu.ecnu.PackageExample,短名称PackageExample
--引用类的时候,必须采用全称引用;程序正文可以用短名称
--PackageExample.java必须严格放置在cn / edu / ecnu目录下
package(3):
--包名 package name尽量唯一
--域名是唯一的,因此常用域名做包名
--域名逆序:cn.edu.ecnu,范围通常从大到小
--类的完整名字:包名 + 类名,cn.edu.ecnu.PackageExample
--包名:和目录层次一样,cn / edu / ecnu / PackageExample.java
--但是包具体放在什么位置不重要,编译和运行的时候再指定
import(1):
注意:(1)import相当于C++中的include
(2)如果PackageExample.java和PackageExampleTest.java在同一个目录,那么import可以省略
(3)可以使用import cn.edu.ecnu.* 但是不可以用import cn.edu.* 。因为 符号 * 代表这个目录下所有的文件,但不包括子文件夹和子文件夹内的文件
import(2):import规则
--import必须全部放在package之后,类定义之前
--多个import的顺序无关
--可以用*来引入一个目录下的所有类,比如import java.lang.* ,此意思是引入java.lang下面所有的类文件,但是不包括java.lang下面的子目录的文件,即并不包括java.lang.reflect.* 。换句话说,不能递归包含各个目录下的文件
--import尽量精确,不推荐用* ,以免新增的同名程序会使得老程序报错
举个例子:
src新建三个包package,分别是a,b,c。a中有一个Man.java,b中有一个Man.java,c的代码如上。当新建一个Man对象时会报错,验证了程序中存在多个import *将会面临调用类指代不清的风险。
解决办法(1):Man m = new Man(); 变成 a.Man m = new a.Man();
解决办法(2):
总结:
--Java通过包(package)来分开类
package必须和目录层次一样
--Java通过引用(import)来导入类
import类尽量准确