现在的位置: 首页 > 综合 > 正文

Java上路08-包间互访

2014年02月10日 ⁄ 综合 ⁄ 共 1397字 ⁄ 字号 评论关闭

       当类文件很多时,我们按类的功能划分,放到不同的文件夹里。此时类之间的互相调用涉及到包互访的问题。包,就是文件夹。比如我在C盘根目录有个带主函数的Test文件,一个External文件,一个internal文件夹,在文件夹里有个Internal文件。我要从Test中调用External,在External中调用Internal。如下,

Test.java文件:

class Test
{
       public static void main(String[] args)
       {
              System.out.println("Test调用外部类Ext");
              External e=new External();
              e.show();
       }
} 

External.java文件:

import internal.Internal;     //导入和本类同级目录下的类
 
public class External
{
       public voidshow()
       {
              System.out.println("这是外部Ext,调用内部的Int");
              Internal i=new Internal();
              i.show();
       }
}

Internal.java文件:

package internal;  //需要指定所在包,才能被和此包同级的类访问到
 
public class Internal
{
       public voidshow()
       {
              System.out.println("内部Int,被外部Ext调用");
       }
} 


 

 现在我想在Test中调用Internal,从Internal调用External,但是因为Java对于默认包的限制,不能从Internal中直接调用默认包中的External.class。所以我们需要给External一个包。

External文件:

package external;
 
public class External
{
       public void show()
       {
              System.out.println("这是外部Ext,调用内部的Int");
       }
} 

Internal文件:

package internal;  //需要指定所在包,才能被和此包同级的类访问到
import external.External;    //导入需要的类
 
public class Internal
{
       public void show()
       {
              System.out.println("内部Int,被外部Ext调用");
              External e=new External();
              e.show();
       }
} 

       要想编译Test,须要首先存在Internal,要想编译Internal,须要首先存在External。

如果我们事先在根目录新建个external文件夹,在其中放入External.java文件是最容易理解的。我们不这样做,直接将External.java反正根目录,通过一个带参的编译命令也很容易完成这个动作。

       这里我将默认包设为了e:\javatest。使用带-d参数的javac命令可以自动创建目录并将编译成的class文件放入。点空格和目录名空格的效果是一样的。

 

然后编译Internal文件,

 

再编译运行Test文件,

 

关于访问默认包下的类,整的我很凌乱。查找多方资料,说从 J2SE 1.4 开始,Java 编译器不再支持 import 进未命包(默认包)名的类、接口。非默认包(子包)中的类调用默认包里的类要用到反射。

我们修改三个文件,

编译中出现标注,略过,

 

抱歉!评论已关闭.