我的意思是:1.) hello1.class 和 hello2.class 在包 pack1 内
2.) hello2 通过自己的 main() 调用 hello1 的构造函数时候出错(但是可通过编译)
3.) 假设包 pack1 外还有 hello3.class,通过 hello3 调用 hello2 的构造函数,就可以间接访问到 hello1 的构造函数(说明 hello2 还是可以调用 hello1 的)我测试了一下,还是这样,问什么 hello2 的 main() 不能调用 hello1
另外,如果在 hello2 和 hello1 中都去掉 package pack1 ,则一切正常了
2.) hello2 通过自己的 main() 调用 hello1 的构造函数时候出错(但是可通过编译)
3.) 假设包 pack1 外还有 hello3.class,通过 hello3 调用 hello2 的构造函数,就可以间接访问到 hello1 的构造函数(说明 hello2 还是可以调用 hello1 的)我测试了一下,还是这样,问什么 hello2 的 main() 不能调用 hello1
另外,如果在 hello2 和 hello1 中都去掉 package pack1 ,则一切正常了
怎么调用的
就会执行hello2中main()的代码,main() 中有调用到hello1()。但是这样却无法运行,提示找不到hello1
也就是说hello2通过main()调用hello1无法实现,但是hello3通过hello2中的构造函数,却能调用hello1
D:\java pack1.hello2
就会执行hello2中main()的代码,main() 中有调用到hello1()。但是这样却无法运行,提示找不到hello1不应该这样调用,既然是调用包内的类,就应该写成这样:
java pack1.hello2
你去试试看,一定没有问题的
classpath e:\myclass;
设e:\myclass\pack1\hello1.class; e:\myclass\pack1\hello2.class;
e:\myclass\pack2\hello3.class;其次hello3.java的代码大致如下:
import pack1.*;
public class hello3
{
public static void main(String[] args)
{
System.out.println("This is Hello3");
hello2 obj=new hello2();//---调用hello2()从而调用到hello1()
}}
D:\java pack1.hello2
f:\>javac pack1/hello1.java
f:\>javac pack1/hello2.java
f:\>java pack1.hello2
运行结果:
This is Hello2
This is hello1()
(我是在win xp 命令提示符下运行的)
你认为我的包的概念没搞清楚,是哪里没清楚,请指出,先谢了另外用你的方法确实可行,但是如果进入pack1文件夹在运行(如E:\myclass\pack1>java hello2)就会提示出错了,你能解释一下吗
运行hello2 在pack1的上层目录
确实如此,能给个解释吗
你的回答我看得不太懂,类装载的搜索是依据文件路径,我这里也是啊回复: huyuleizj()
运行时未必要在能够看的见pack1的上层目录下运行,什么地方都可以,只要是在classpath中定义的路径中能找到和包同名的文件夹即可,我举的例子中一切都正常(hello3和hello1的包是平行关系,并不是在上层文件夹,但是也可以访问),唯一出问题的是,hello2中的main(),只要一执行就出错。
另外,如果在 hello2 和 hello1 中都去掉 package pack1 ,则一切正常了
这是肯定的
hello1和hello2在同一个包中,
这时你不需要package;
相反,你用了package就要用import来访问了,
否则就出错
你运行时要在c:\目录下运行这样的命令
java package1\hello2