跟女朋友学java的时候发现了一个神奇的问题,是关于java包的引入的,用import 包名.*的方法引入类,发现只有在.java文件存在于该包中的时候,.*的引入才能成功,否则就路径不对访问不到,只能用 包名.类名 的方式详细指导引入。
  这跟我了解的知识有些出入,.java源文件应该不会影响到类于类之间的关系才对,为什么会影响到类的引入,求高人指点。

解决方案 »

  1.   

    源文件编码类文件后就没有用了,运行的是类文件与源文件无关,用 包名.类名 的方式详细指导引入是一种另一种就是用import 包名.*那也是引入包中的所有类,具体请参看java中的命名空间
      

  2.   

    女朋友学java”, cool.
      

  3.   

    LZ的理解错了
    其实是这样的,你引包的内容都是在你的jre中存在的jar包,而这些jar包里面都是些.class文件,可以直接引。
    一般的全名能访问的类只要在某个包中都是可以直接import来引用的。至少到目前为止我还没有遇到过必须使用全名的。当然如果你两个包的同名类在一个java文件里面同时用到的时候就必须全名来区分,这种一般就是自己试验的时候看看,基本不会遇到。
      

  4.   

    个人觉得··我学了差不多一年的Java了··基本上自己写的类都是重复了API的···痛哭··
      

  5.   

    只可能是你试验错误。要不然整个java世界都崩塌了。建议重新理一下你的实验环境。
    因为*.java文件是由javac。exe(windows平台下)编译的,编译后为*.class文件。
    然后通过java.exe执行*.class文件。
    按照你的说法是在java.exe执行期间,还需要用到*.java文件。——这估计当初设计java编译和运行体制的人也是没想到的。
    你首先要清楚,你引入的那个类,它编译后到底编译到哪个地方去了?也就是那个类的".java"文件对应的"*.class"文件到底存放在哪个位置。你是否确认,当你在实验“删除java文件,无法import”时,那个class文件是否还在,同时,是否能被你当前的类访问到。
      

  6.   

    楼主说的不是很明白,
    如果是Java库的类,不是你的机器Java环境没配置对,不然就是你学习的时候总是和你女朋友...
    如果引用的是自己写的java文件,那你这个引用的文件的包设置是否和你要执行的文件在同一个包内?
      

  7.   

    7楼说的感觉有点切近我的问题,我也是觉得这不可能,.java文件是不会影响到后面的运行的嘛,我想可能是跟编译时候文件所在的位置有关系,准备再做个实验,看看到底怎么回事。
      

  8.   

    刚才重新做了个实验,已经发现了问题所在,总结下,留给以后可能会碰到的朋友。
    在自己编写类的时候,有2种方法创建包,一种是-d参数创建,一种是手动创建。我用的是后者,这个过程中,若该类(也就是有声明package的那个类)的源文件不是在对应的文件夹内(既package声明的那个包)进行编译,而是编译生成.class文件后,再将其放入对应文件夹内的,那么外部类使用  import 包名.*   的方法引入这个类,就会出现无法访问的情况,只能用   包名.类名   的方法引入。
    只要将.java文件(有package的那个)在对应的包中编译就不会出现上述情况了。