问题描述
如下面的两个Java程序:1.packagecom.vinsunlight;publicclassTest2{}2.packagecn.mybole;//importjava.io.File;importcom.vinsunlight.*;publicclassTest{publicstaticvoidmain(String[]args){Test2t2=newTest2();System.out.println("!!");}}为什么第二个程序中不把packagecn.mybole删去则不能编译,并且这样不能运行main函数;而当把导入包中的importcom.vinsunlight.*改为importcom.vinsunlight.Test2,此时把packagecn.mybole删去同样能编译运行。小弟是个初学者,实在是解决不了这个问题,望各位高人多多指教
解决方案
解决方案二:
当两个类在不同的包A、B中时,A中的类想调用B包中的类,必须使用import引入,如果不引入则不能找到对应的类,所以不能编译。当两个类在同一包里时,可以不用import引入。
解决方案三:
同意LS的观点,另外如果LZ在classpath增加packagecom.vinsunlight的路径也可以运行
解决方案四:
1楼只解释了import的问题并没有解释楼主package问题。import指的是需要引入的类,而*号代表这个包下面的所有类被引入。源代码的要求最严格,而一旦源代码自己声明了在哪个package路径之下,class也就有了自己在哪个package下面的信息,就是那句程序开头的"packagexx.xx.xx"。有人问,为什么要有这个信息,直接放目录结构里不就好了么?是啊,直接放目录中确实可以找到.class和.java,但是如果我要输出这个.class是属于哪个package的,该怎么办?所以我们需要在.class里面留一个package的信息。如果我们要区分同样名称为A.class的类怎么办?所以我们需要在.class里面留一个package的信息。 .java文件是一个独立的编译单元,类似c++里面的cpp文件,但是它不需要.h文件,只要.java就足够了,一个.java文件里面可以包含一个public的类,若干package类(package类特征是没有任何访问控制修饰),还有内隐类的话,则还可以包含若干protected和private的类。每个类,都会在编译的时候生成一个独立的.class文件,所以.java和.class不是一对一,而是一对多的关系,不过.java和public的类是一对一的。所有这些.class,都由这个.java开头的package语句来确定自己在package中的位置。 packagexx.bb.aa; 说明这个.java编译单元中的所有类都放到xx.bb.aa这个package里面。而对应的,必须把这个.java文件放在xx目录下bb目录下的aa目录里面。如果一个.java文件没有任何package语句,那么这个.java里面的所有类都在package的"/"下面,也称之为defaultpackage。可以看出你一般从任何java教科书上写的第一个helloworld程序的那个类是在defaultpackage里面的。有了package语句,情况就复杂一点了。这个编译单元.java必须放在package名对应的目录之下。而生成的class文件也要放在对应的目录结构之下才能正常运作。
解决方案五:
wsk1002讲的很仔细
解决方案六:
好好看看2楼的吧呵呵我也学习一下拉虽然只是路过
解决方案七:
在相应的目录下确实生成了类文件,只是使用import不能引用,而把路径全部写清楚就可以,用*代替就不行,但是当引用Random类时只需要importjava.util.*就可以,不知道问题到底出在哪里,谢谢各位高人了