黑马程序员技术交流社区

标题: 包_02 [打印本页]

作者: Tauruszzy    时间: 2015-5-11 13:12
标题: 包_02
包的产生可以使程序范围变大,那么不同包中的类该如何访问呢?
举例:假如pack包中的PackageDemo访问packa包中的DemoA。
DemoA代码如下:
  1. package packa;
  2. class DemoA
  3. {
  4.         void show()
  5.         {
  6.                 System.out.println("我是DemoA------");
  7.         }
  8. }
复制代码

编译DemoA并在f盘的myclass文件夹下生成packa包。dos命令行代码如下:
  1. e:\sourcefile>javac -d f:\myclass DemoA.java

  2. e:\sourcefile>
复制代码

编译PackageDemo.java,并在f盘的myclass文件夹下生成pack包,过程如下:
  1. e:\sourcefile>javac -d f:\myclass DemoA.java

  2. e:\sourcefile>javac -d f:\myclass PackageDemo.java
  3. PackageDemo.java:9: 错误: 找不到符号
  4.                 DemoA d=new DemoA();
  5.                 ^
  6.   符号:   类 DemoA
  7.   位置: 类 PackageDemo
  8. PackageDemo.java:9: 错误: 找不到符号
  9.                 DemoA d=new DemoA();
  10.                             ^
  11.   符号:   类 DemoA
  12.   位置: 类 PackageDemo
  13. 2 个错误

  14. e:\sourcefile>
复制代码

发现产生了错误,修改如下,原因见代码中:
  1. /*
  2. PackageDemo代码
  3. */
  4. package pack;
  5. class  PackageDemo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 packa.DemoA d=new packa.DemoA();//[color=Red]类名为:包名.类名[/color]
  10.                 d.show();
  11.         }
  12. }
复制代码

重新编译,又出现错误提示:
  1. e:\sourcefile>javac -d f:\myclass PackageDemo.java
  2. PackageDemo.java:9: 错误: 程序包packa不存在
  3.                 packa.DemoA d=new packa.DemoA();
  4.                      ^
  5. PackageDemo.java:9: 错误: 程序包packa不存在
  6.                 packa.DemoA d=new packa.DemoA();
  7.                                        ^
  8. 2 个错误

  9. e:\sourcefile>
  10. 错误原因:packa包不再当前目录下
复制代码

设置classpath变量到packa包目录下,告诉jvm去找packa包的地方;dos命令行设置如下:
  1. e:\sourcefile>javac -d f:\myclass PackageDemo.java
  2. PackageDemo.java:9: 错误: DemoA在packa中不是公共的; 无法从外部程序包中对其进行访

  3.                 packa.DemoA d=new packa.DemoA();
  4.                      ^
  5. PackageDemo.java:9: 错误: DemoA在packa中不是公共的; 无法从外部程序包中对其进行访

  6.                 packa.DemoA d=new packa.DemoA();
  7.                                        ^
  8. 2 个错误

  9. e:\sourcefile>
复制代码

又产生错误,原因是DemoA中的类权限不够大:修改代码如下:

  1. package packa;
  2. [color=Red]public [/color]class DemoA //此处做了修改
  3. {
  4.         void show()
  5.         {
  6.                 System.out.println("我是DemoA------");
  7.         }
  8. }
复制代码

编译DemoA,PackageDemo俩文件,又产生错误如下:
  1. e:\sourcefile>javac -d f:\myclass PackageDemo.java
  2. PackageDemo.java:10: 错误: show()在DemoA中不是公共的; 无法从外部程序包中对其进行
  3. 访问
  4.                 d.show();
  5.                  ^
  6. 1 个错误

  7. e:\sourcefile>
复制代码

修改DemoA代码如下:
  1. package packa;
  2. public class DemoA
  3. {
  4.     public void show()
  5.         {
  6.                 System.out.println("我是DemoA------");
  7.         }
  8. }
复制代码

编译通过!
运行,在dos行输入:java pack.PackageDemo程序运行成功,产生结果
我是DemoA!------
总结 :
包也是一种封装形式,
包与包之间进行访问,被访问的包中的类及其成员需要公有。即public修饰。


作者: Tauruszzy    时间: 2015-5-11 13:17
设置classpath变量到packa包目录下,告诉jvm去找packa包的地方;dos命令行设置如下:
作者: Tauruszzy    时间: 2015-5-11 13:25
设置classpath变量到packa包目录下,告诉jvm去找packa包的地方;dos命令行设置如下:set classpath=f:\myclass




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2