java调用包时的问题
如果在同一个包内可以不用import 直接创建对象 比如同包内有一个class内容为
1 2 3 4 5 6 7 8 9 10 |
package cn.rui0; public class Telphone { public Telphone() { // TODO Auto-generated constructor stub System.out.println("cn.rui0.Telphone"); } } |
直接这样 或者注释掉第二行都可以调用
1 2 3 4 5 6 7 8 9 |
package cn.rui0; import cn.rui0.Telphone; public class pagbao { public static void main(String[] args) { Telphone phone = new Telphone(); } } |
但如果还有个包或者子包,他们和上面那个包中有相同的类名时
1 2 3 4 5 6 7 8 9 10 11 |
package cn.rui0.cs; public class Telphone { public Telphone() { // TODO Auto-generated constructor stub System.out.println("cn.rui0.cs.Telphone"); } } |
调用时就需要
1 2 |
import cn.rui0.cs.Telphone; |
才能输出 cn.rui0.cs.Telphone
如果你像下面这样调用 没有明确指明具体是哪个class
1 2 3 4 5 6 7 8 |
package cn.rui0; import cn.rui0.cs.*;//或者调用其他包时没有指明文件 public class pagbao { public static void main(String[] args) { Telphone phone = new Telphone(); } } |
则他会首先寻找自己包内有没有这个类,如果有就先调用自己包里的最后输出cn.rui0.Telphone 执行过程就如第一个一样。(如果没有就再调用import了的.cs里的这个类 最后输出的就是cn.rui0.cs.Telphone)像上面这个咱们2已经假设了两个包内有相同的类名的情况,它当然就会输出cn.rui0.Telphone了
so,
如果要调用的类在另一个包或者子包并与这个包中的类名不同,则可以用通配符调用其所有文件或者还是指定文件调用 如下
另一个包中的tclass类
1 2 3 4 5 6 7 8 9 10 |
package cn.ruilin; public class tclass { public tclass() { // TODO Auto-generated constructor stub System.out.println("cn.ruilin.tclass"); } } |
调用该包内其全部文件
1 2 3 4 5 6 7 8 |
package cn.rui0; import cn.ruilin.*; public class pagbao { public static void main(String[] args) { tclass phone = new tclass(); } } |
这样是可以运行的 并且输出cn.ruilin.tclass
也就是说,你不导入包时程序会自动把本包下的文件导入提供调用,当然你也可以指明调用哪个。
而当导入其他包的类与本包类重名时,不能采用import 包名.*;此时java程序只承认本包下的文件;而应该采用import 包名.文件名,此时java程序只承认由其他包导入的文件。
近期评论