两个文件,其中一个文件名字是TestClass.java,代码如下:
package TestPack;
public class TestClass
{
public void testFunc()
{
System.out.println("This is TestClass");
}
}
另一个文件名字是test.java:代码如下:
import TestPack.TestClass;
class testPackage
{
void packageCheck()
{
new TestClass().testFunc();
}
}
以上这种写法编译可以通过,
为什么把import语句换成import TestPack.*;之后编译就通不过了?

解决方案 »

  1.   

    test.java:6:无法访问TestClass
    错误的类文件:.\TestClass.java
    文件不能包含类:TestClass
    请删除给文件或确保该文件位于正确的类路径子目录中。
                  new TestClass().testFunc();
                      ^
    1 错误
      

  2.   

    更正一下:请删除给文件
    应为:请删除该文件
    上面的是用命令行编译的,
    如果用jcreator编译,错误信息是:无法访问TestClass
      

  3.   

    EC 编译没有错吧 我拿EC试的
      

  4.   

    jcreator的问题,我也试过,用elicpse就可以。
      

  5.   

    我不用EC  直接用命令提示符都没有问题
    放弃JC 用EC吧 
    还请LZ忍痛割爱
      

  6.   

    java中的包会对应到一个文件夹,楼主提出的两个文件应该是这样一个文件夹结构:(假设在C:根目录下)C:/
    |-- test.java (源文件)
    |-- TestPack  (文件夹)
       |-- TestClass.java (源文件)楼主问题的根源在于CLASSPATH的设置会影响javac的执行方式:    当你导入一个包中所有的类(import TestPack.*)时,javac在编译时并不确定你要使用的TestClass类是TestPack包中的类,还是其他包中的类,它会根据你机器上的CLASSPATH环境变量的值去查找类,通常我们在CLASSPATH中会设置一个点(.),表示当前目录,如果没有CLASSPATH环境变量,那么在JDK1.4之后,默认也是查找当前目录。javac在按照文件名(不包括后缀)来查找类,于是找到TestClass.java,而这个文件根本不是字节码文件,当然就报错了。当你导入一个具体的类时,javac在分析源文件时就知道了你程序中用的类是TestPack.TestClass,那么它就在CLASSPATH环境变量下查找TestPack目录下的TestClass类,正好有,于是正确执行。
      

  7.   

    楼主可以根据上面的分析 以及 下面的提示:test.java:6:无法访问TestClass
    错误的类文件:.\TestClass.java
    文件不能包含类:TestClass
    请删除给文件或确保该文件位于正确的类路径子目录中。
    new TestClass().testFunc();
    ^
    1 错误
    -------------------------
    将.\TestClass.java删除或者移动到其它的目录,程序又可以重新正确执行.
      

  8.   

    按照东成西就,芝兰境界说的试了一下,果然是这样:先编译TestClass.java,然后删掉,然后再编译test.java,通过。
    结贴,给分