现在,学习
import
语句。
假设有两个存放在
D:/src
下的源文件
Cited.java
和
Citing.java
。
Cited.java
文件内的程序:
package classes.shang;
public class Cited
{
public void print()
{
System.out.println("Hello World!
我是被调用子类的程序输出呀!
");
}
}
Citing.java
文件内的程序:
import classes.shang.Cited;
public class Citing
{
public static void main(String[] args)
{
Cited demo=new Cited();
System.out.printf("/n
这是一个
pakage
语句和
import
语句的演示程序:我将调用
Cited
类,它会输出:
/n
/
n");
demo.print();
}
}
如图所示运行:
可能出现的其他几种情况:
①
运行命令:
javac Cited.java
。这种情况下生成
Cited.class
文件存放在当前文件夹下即
D:/src
下,这里如有不明白可以参考
package
语句学习。当编译
Citing.java
时会提示以下错误:
D:/src>javac Citing.java
Citing.java:1:
软件包
classes.shang
不存在
import classes.shang.Cited;
^
Citing.java:6:
无法访问
Cited
错误的类文件:
./Cited.class
类文件包含错误的类:
classes.shang.Cited
请删除该文件或确保该文件位于正确的类路径子目录中。
Cited demo=new Cited();
^
2
错误。
这是因为
Citing.java
文件指明在
classes/shang
路径引用
Cited.class,
在结合类路径下仍然无法找到所要的类文件。
②
运行命令:
javac -d . Cited.java
。这种情况下当前文件夹下生成
classes
文件夹,
classes
文件夹下生成
shang
文件夹。
Cited.class
文件存放
shang
文件夹下,
Cited.class
文件的路径即
D:/src/classes/shang
。运行命令
javac Citing.java
可以成功,因为当前工作路径已经是
D:/src
,编译程序首先搜索当前路径结合
import
语句就可以找到
D:/src/classes/shang
下的
Cited.class
文件。当然也能运行成功,但这样失去
packagey
语句的作用,未能完全将源文件和类文件分开。存储类文件的
classes
文件夹在存储源文件的
src
文件夹下。
③
注意到
Citing.java
中的
import
语句指明引用
Cited
类,若改为通配符
*
;运行命令:
javac -d E:/ Cited.java,
编译成功,可是当运行命令:
javac Citing.java
,就会出现如下提示错误:
Citing.java:6:
无法访问
Cited
错误的类文件:
./Cited.java
文件不包含类
Cited
请删除该文件或确保该文件位于正确的类路径子目录中。
Cited demo=new Cited();
^
1
错误
我们已经设置
classpath
,怎么还会出现上面如:无法访问、文件不包含类的错误呢?编译程序首先搜索当前路径下的文件,搜索
Cited.java
造成错误,可以在编译
Cited.java
成功后,删除
Cited.java
,再运行命令:
javac Citing.java
。整个过程如图:
如果运行的命令是
javac Cited.java
,成功后,运行命令
javac Citing.java,
结果出现如下提示错误:
Citing.java:1:
软件包
classes.shang
不存在
import classes.shang.*;
^
Citing.java:6:
无法访问
Cited
错误的类文件:
./Cited.class
类文件包含错误的类:
classes.shang.Cited
请删除该文件或确保该文件位于正确的类路径子目录中。
Cited demo=new Cited();
^
2
错误
希望上面的内容,能对大家有帮助。
本人是一初学者,以上想法难免有不当,不准确和错误之处,希望大家多多包涵,欢迎批评指正。
也欢迎交流讨论,
我的
qq:348737102
e-mail:Shang_023@126.com