package和import
我们写代码的时候难免会有两个类名相同的时候,例如你和你的同事合作开发一个程序每人一个模块但是你们代码放在同一目录,你建了一类Person.java,而你的同事也需要一个Person.java怎么办?用石头剪刀布选出一人再想一个类名吗?当然不会,正常思维应该是放在不同的目录。
所以说我们希望代码管理上能有类似于“文件夹”的东西。有吗?有的。Java里这种机制,叫做包(package)。
package##
包的语法:<code>package 包名;</code>
注意package语句必须作为代码的第一行(前面可以有注释)。
直接看示例,新建文件夹叫PackageDemo,进去新建一个Person.java类:
package com.xuhongchuan.packagedemo;
public class Person {
String name;
}
编译Person.java类,但是得改一下编译指令:
<code>javac (NAME_PART).java</code>改为<code>javac -d . $(NAME_PART).java</code>
新加的<code>-d</code>是把编译好的class文件放到指定目录,<code>.</code>是当前目录。

编译后的class会放在com\xuhongchuan\packagedemo目录下。

可以看到javac会根据你的报名创建想要的文件夹,并把class文件放在指定目录下。但是如果你不加<code>-d .</code>参数是不会的,只会和java文件放在一块。所以从现在开始编译一律使用<code>javac -d . $(NAME_PART).java</code>。
继续这个示例,回到PackageDemo目录下创建一个Test.java文件:
public class Test {
public static void main(String[] args) {
Person p = new Person();
}
}
编译出错了:
<pre>
Test.java:4: 错误: 无法访问Person
Person p = new Person();
^
错误的源文件: .\Person.java
文件不包含类Person
请删除该文件或确保该文件位于正确的源路径子目录中。
1 个错误
</pre>
这是路径的问题,因为当前目录下没有Person.class。
那我们改一下:
com.xuhongchuan.packagedemo.Person p = new com.xuhongchuan.packagedemo.Person();
这样编译没问题了。
但是每次都要写一串包名好繁琐啊,这时候就需要import上场了。
import##
import可以导入指定目录下的类文件,这样就不需要每次使用这个类时要敲完整的包名。
使用方法如下:
把Test.java改为:
import com.xuhongchuan.packagedemo.Person;
public class Test {
public static void main(String[] args) {
Person p = new Person();
}
}