java包间通信_Java上路08-包间互访

当类文件很多时,我们按类的功能划分,放到不同的文件夹里。此时类之间的互相调用涉及到包互访的问题。包,就是文件夹。比如我在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调用");

}

}

0818b9ca8b590ca3270a3433284dd417.png

现在我想在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文件放入。点空格和目录名空格的效果是一样的。

0818b9ca8b590ca3270a3433284dd417.png

然后编译Internal文件,

0818b9ca8b590ca3270a3433284dd417.png

再编译运行Test文件,

0818b9ca8b590ca3270a3433284dd417.png

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

我们修改三个文件,

0818b9ca8b590ca3270a3433284dd417.png

编译中出现标注,略过,

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值