小弟新手有一些问题不解,想向大家学习一下。
先说一下我的理解
1.package应该是一个类固有属性的一部分(表示该类存在于哪个地址)
2.import应该是表示该类引用了哪个类(包括地址)
3.classpath表示的在运行程序之前寻找的被引用类的地址
如果这样的话那么在每个classpath目录下的package应该是单独且唯一的。如果两个classpath目录下有相同的package,import该怎么引用呢?
例如:
set classpath=D:\myclass1;D:\myclass2;
//D:\java\test1.java
import a.b.*;
public class test1
{
 static public void main(String[] args)
 {
  test t = new test();
 }
}//D:\myclass1\a\b\test.java
package a.b;
public class test
{
 public static void main(String[] args)
 {
  System.out.println("myclass1");
 }
}//D:\myclass2\a\b\test.java
package a.b;
public class test
{
 public static void main(String[] args)
 {
  System.out.println("myclass2");
 }
}
===========================================================
上面的test1在引用test时引用的是哪个test呢?
我上面的三个小程序运行出错是为什么呢?~~ 

解决方案 »

  1.   

    package 用来区分同名类
    import你说的是对的
    classpath 这个说实话我没用过
      

  2.   

    如果两个classpath目录下有相同的package, 使用前面的PACKAGE:D:\myclass1\a\b\test
    所以你的程序应该输出:myclass1
      

  3.   

    如果是使用前面的package,我想这是不是java的一个bug呢?因为很少有人会关心classpath中哪个在前哪个在后吧。
      

  4.   

    还有就是//D:\myclass1\a\b\test.java 
    运行就出错,是哪里错了呢?
    //D:\myclass2\a\b\test.java 也是一样的
      

  5.   

    一运行就提示下面的错误,是什么意思啊?Exception in thread "main" java.lang.NoClassDefFoundError: test
    Caused by: java.lang.ClassNotFoundException: test
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    Could not find the main class: test.  Program will exit.
      

  6.   


    这应该不属于java规范内的东西,
    视乎虚拟机的具体实现吧。JDK 1.4 的时候,
    只要找到一个就认为成功,
    不会检查冲突。
    以后的版本就不知道了。
      

  7.   

    这个不是BUG,是一种解决冲突的方式,放在前面的会把后面的覆盖掉的
      

  8.   

    很明显是test没找到哦,多检查检查
      

  9.   

    找不到test是怎么回事呢?
    package a.b; 
    public class test 

    public static void main(String[] args) 

       System.out.println("myclass1"); 

    }
    javac test.java
    java test
      

  10.   

    我把classpath设置成D:\myclass1。test里面写了package a.b。
    最后运行的时候为什么找不到test呢?
    我想我运行的时候应该在myclass里面寻找a\b才对呀.这样的话应该不会找不到test吧
      

  11.   


    应该这样执行:java a.b.test