两个包,一个包中的类调用另一个包中的类:
package packa;
class PackageDemoA
{
void show()
{
System.out.println("DemoA show run");
}
}
package pack;
class PackageDemo
{
public static void main(String[] args)
{
packa.PackageDemoA a=new packa.PackageDemoA();//调用classpath路径下的类文件,所以要设classpath为packa包所在路径
a.show();
}
}
清空classpath:
D:\java\day09>set classpath=
D:\java\day09>set classpath
环境变量 classpath 没有定义
先编译PackageDemoA.java文件:
D:\java\day09>javac -d c:\java PackageDemoA.java
第一次编译PackageDemo.java文件:
D:\java\day09>javac PackageDemo.java
PackageDemo.java:7: 错误: 程序包packa不存在
packa.PackageDemoA a=new packa.PackageDemoA();//调用classpath路
径下的类文件,所以要设classpath为packa包所在路径
^
PackageDemo.java:7: 错误: 程序包packa不存在
packa.PackageDemoA a=new packa.PackageDemoA();//调用classpath路
径下的类文件,所以要设classpath为packa包所在路径
^
2 个错误
设置classpath再次编译(注意错误提示不一样了!):
D:\java\day09>set classpath=c:\java
D:\java\day09>javac PackageDemo.java
PackageDemo.java:7: 错误: PackageDemoA在packa中不是公共的; 无法从外部程序包中对
其进行访问
packa.PackageDemoA a=new packa.PackageDemoA();//调用classpath路
径下的类文件,所以要设classpath为packa包所在路径
^
PackageDemo.java:7: 错误: PackageDemoA在packa中不是公共的; 无法从外部程序包中对
其进行访问
packa.PackageDemoA a=new packa.PackageDemoA();//调用classpath路
径下的类文件,所以要设classpath为packa包所在路径
^
2 个错误
有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限,所以被访问的类要被public修饰。
改PackageDemoA.java文件再次编译:
package packa;
public class PackageDemoA
{
void show()
{
System.out.println("DemoA show run");
}
}
结果:(错误又不一样了!)
D:\java\day09>javac -d c:\java PackageDemoA.java
D:\java\day09>javac PackageDemo.java
PackageDemo.java:9: 错误: show()在PackageDemoA中不是公共的; 无法从外部程序包中对
其进行访问
a.show();
^
1 个错误
类公有后,被访问的成员也要公有才可以被访问。
改PackageDemoA.java文件再次编译:
package packa;
public class PackageDemoA
{
public void show()
{
System.out.println("DemoA show run");
}
}
D:\java\day09>javac -d c:\java PackageDemoA.java
D:\java\day09>javac PackageDemo.java
D:\java\day09>
PackageDemo.java文件也通过了编译!
运行:
D:\java\day09>java pack.PackageDemo
错误: 找不到或无法加载主类 pack.PackageDemo
原因:我一开始编译PackageDemo就没有设置包所在路径,即没有创建包文件夹(而编译PackageDemoA时设置并生成了),所以:
D:\java\day09>javac -d d:\java\day09 PackageDemo.java
D:\java\day09>java -d d:\java\day09 pack.PackageDemo
Unrecognized option: -d
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
原因:我又一次误解了,用java命令运行.class文件时,要设置的是classpath路径,而不是用-d来指定。设置成PackageDemo的包和PackageDemoA的包所在的两个路径后重新运行:
D:\java\day09>set classpath=.;c:\java
D:\java\day09>java pack.PackageDemo
DemoA show run
D:\java\day09>