[Java]包与包之间的调用

来源:互联网 发布:php教学网站 编辑:程序博客网 时间:2024/04/30 00:20

两个包,一个包中的类调用另一个包中的类:

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>

0 0
原创粉丝点击