Eclipse IDE下,问题描述如下:
一个项目中有两个包:
org.mrtwo.pack01 --- 包中有一个类Test
org.mrtwo.pack02 --- 包中有两个类Test和Demo,其中Demo为主类,内容如下:
import org.mrtwo.pack01.*; //即导入第一个包
public class Demo{
public static void main(String[] args){
Test t = new Test(); //经测试使用的是自己包中(pack02)的那个Test类。
}
}
问题是:如果把import org.mrtwo.pack01.*改成import org.mrtwo.pack01.Test创建Test对象,使用的就是pack01包中的类而不是使用自身包中的个Test,这问题可能与classpath找类有关,想问下1、eclipse中搜索一个类的顺序是什么(先本包再其他包还是跟设置有关等等...)2、import什么时候起作用,是运行时需要那个类的时候才根据import导入需要的类还是什么??望大神指导,不明白的地方还请追问。
------解决方案--------------------
顺序是:
全名->本包->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下的
------解决方案--------------------
+1
------解决方案--------------------
默认的优先级,肯定是本包的大于其他包的。向你提供的这种情况,如果本包和别的包有相同的类名,想用其他包的那个类必须使用绝对路径找到那个类,因为默认会先找本包的类是否存在该类!!!如果不存在会查看你导入的包里有没有这个类