我的意思是: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 ,则一切正常了

解决方案 »

  1.   

    2.) hello2 通过自己的 main() 调用 hello1 的构造函数时候出错(但是可通过编译)
    怎么调用的
      

  2.   

    回复 :tom2005(快乐着) 直接运行:D:\java hello2
    就会执行hello2中main()的代码,main() 中有调用到hello1()。但是这样却无法运行,提示找不到hello1
      

  3.   

    如果另外一个包中的hello3.class 在导入pack1后调用hello2的构造函数,却能很正常的引起hello1()的调用,
    也就是说hello2通过main()调用hello1无法实现,但是hello3通过hello2中的构造函数,却能调用hello1
      

  4.   

    hello3是怎么写的运行hello2 在pack1的上层目录
    D:\java pack1.hello2
      

  5.   

    理论上不存在,应该是你的文件没放在同一目录,因为java程序一般对应着一个和包结构一样的目录结构。classPath中应加入“.;”。
      

  6.   

    直接运行:D:\java hello2
    就会执行hello2中main()的代码,main() 中有调用到hello1()。但是这样却无法运行,提示找不到hello1不应该这样调用,既然是调用包内的类,就应该写成这样:
      java pack1.hello2
    你去试试看,一定没有问题的
      

  7.   

    这些类要是放在同一个Package和同一个目录(同一个包下面的同一个目录)下就可以相互访问,不用再引入了
      

  8.   

    首先,肯定是一个包中,
    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()
    }}
      

  9.   

    运行hello2 在pack1的上层目录
    D:\java pack1.hello2
      

  10.   

    个人认为是你的包的概念没搞清楚,我把你的程序运行了一遍,完全能运行。我把pack1放在了f盘下。具体命令如下:
    f:\>javac pack1/hello1.java
    f:\>javac pack1/hello2.java
    f:\>java pack1.hello2
    运行结果:
    This is Hello2
    This is hello1()
    (我是在win xp  命令提示符下运行的)
      

  11.   

    回复: huyuleizj()
    你认为我的包的概念没搞清楚,是哪里没清楚,请指出,先谢了另外用你的方法确实可行,但是如果进入pack1文件夹在运行(如E:\myclass\pack1>java hello2)就会提示出错了,你能解释一下吗
      

  12.   

    回复:tom2005(快乐着)
    运行hello2 在pack1的上层目录
    确实如此,能给个解释吗
      

  13.   

    文件夹的路径是创建和编译的时候根据包信息生成的,包的信息存放在class文件中类装载的搜索是依据文件路径,然后依据.class里面的包信息,一切符合了才会加载成功记住就可以了,运行时,加上包,且路径要对
      

  14.   

    包的问题 快乐着 已经解释的很清楚了。其实就是个文件夹的路径层次问题。之所以E:\myclass\pack1>java hello2 会出错,是因为hello2定义时被放在了包pack1中,所以运行时要在能够看的见pack1的上层目录下运行, 如果在pack1下运行,java会在pack1目录下搜索包pack1,这当然找不到了。
      

  15.   

    回复: tom2005(快乐着) 
    你的回答我看得不太懂,类装载的搜索是依据文件路径,我这里也是啊回复: huyuleizj() 
    运行时未必要在能够看的见pack1的上层目录下运行,什么地方都可以,只要是在classpath中定义的路径中能找到和包同名的文件夹即可,我举的例子中一切都正常(hello3和hello1的包是平行关系,并不是在上层文件夹,但是也可以访问),唯一出问题的是,hello2中的main(),只要一执行就出错。
      

  16.   

    我测试了一下,还是这样,问什么 hello2 的 main() 不能调用 hello1
    另外,如果在 hello2 和 hello1 中都去掉 package pack1 ,则一切正常了
    这是肯定的
    hello1和hello2在同一个包中,
    这时你不需要package;
    相反,你用了package就要用import来访问了,
    否则就出错
      

  17.   

    你运行时的环境有问题,照你的说法你运行时应用个package1目录,这两个CLASS都应在这个目录里,运行时应写成这样,如你的package1目录放在c:\目录下,这时你的两个class文件都应放在这个目录里
    你运行时要在c:\目录下运行这样的命令
    java package1\hello2