解决方案 »

  1.   

    跟classpath毛关系都没有。具体使用的是哪个类,是编译期就决定了的,并非运行时决定的。
      

  2.   

    是这样啊,那为啥我import xxxx.*使用的就是本包中的类,import xxx.xxx.class写具体了使用的就是另一个包中的类
      

  3.   

    类似楼主引用类的问题,我曾经遇到过。当时写的程序类里,明明都已经import了相关的类了,但在实例化使用变量的方法时候,一大堆红叉,花了大把时间,后来也是把路径引用直接指向跟文件,就ok了。java编译器的查找解析顺序是这样的,package -》 import -》 class -》然后具体的类方法具体的原理,我推荐你看这本书《深入理解java虚拟机》。这本书看了两遍模模糊糊,希望楼主通过阅读此书找到答案通知我下!谢谢。
      

  4.   

    随便搞个例子试下就好,一个import .*,另一个import .class写完整了
      

  5.   

    其实,通过这样的案例,深刻地告诉我们程序员。就算代码写得准确无误,一旦逻辑出现问题,一切等于白搭。所以,testing时带着怀疑的看法,推荐一本书《程序员的职业素养》
      

  6.   

    顺序是:
    全名->本包->import
    你的情况:一个项目中有两个包:
    org.mrtwo.pack01 --- 包中有一个类Test
    org.mrtwo.pack02 --- 包中有两个类Test和Demo,其中Demo为主类,内容如下:首先你代码里的Test类全名是org.mrtwo.pack02.Test,全名搜索你的代码里不存在这个类,于是转向第二个本包搜索。
    由于你Test和Demo都在org.mrtwo.pack02包下,找到,所以再进行import搜索。
    所以在import org.mrtwo.pack01.*的情况下,编译后的Test是pack02,也就是本包搜索的类。同样的,如果你写下import org.mrtwo.pack01.Test,那么在第一部全名搜索的时候就已经搜索到Test类,那么编译后的Test类就是pack01下的
      

  7.   

    如果导入的包和本包内有重复的类名jvm是随机实例化的,也就是也可能是实例化包1也可能是实例化包2内的Test类,所以为了避免这个情况在有相同类名的情况下实例化应该写全包名
    例:
    package pack2;
    import pack1.Test;
    public class Test{
    public void main(String[] args){
    pack1.Test t1 = new pack1.Test();
    pack2.Test t2 = new pack2.Test();
    }
    }
      

  8.   

    应该是跟变量的道理是一个样的,你在main中声明一个变量,在main里面弄个块再次声明相同名字变量,这是也是可以的,只不过会就近的使用该变量并覆盖外面的,要使用之前被覆盖的话就要使用完全名或者什么this,super(看情况而定)
      

  9.   

    1、首先在你编写代码时,IDE就开始校验,Test类路径,首先他找到是和你Demo同级路径的Test。如果当前包,没有找到,他才回提示你。需要引入外部包。
      

  10.   

    额,不知道我的理解对不对,我觉得应该是和ClassLoader有关,java中的类都是通过ClassLoader来加载的,java为了避免用户重名类覆盖基本类,总是先搜索JDK自带的类。
      

  11.   

    麻烦问一下,全名搜索是什么?我一直认为的是编译的时候需要一个类,现在本包中获得,如果没有再看import导入的类,但是问题就是import pack01.*;跟import pack01.Test不同,貌似后者是优先于包查找的,这就是全名搜索吗?