使用Windows等设备名称作为Java类名称

时间:2011-08-02 07:51:44

标签: java

我指的是我之前的问题,但这次我使用了java编译器,编译器编译输出 - 它给出了一个奇怪的输出。这次我使用this代替super

enter image description here

这是该程序的代码。

class Con {
    int x = 10;
    Con() {
        this(2);
        System.out.println("x :" + x);
    }
    Con(int i) {
        x = i;
        System.out.println("x :" + x);
    }   
}

class DemoCon {
    public static void main(String args[]) {
        Con c1 = new Con();
    }
}

您认为这里的问题是什么?这是Java中的错误吗?

Java版本 - 1.6.0 JDK

我使用Eclipse运行程序,并且找不到Class。 A.java是文件名...我们进行了一次小编辑,并创建了一个名为A.java的公共类,但结果是相同的。我们进一步发现问题在于编译器。

6 个答案:

答案 0 :(得分:14)

在Windows上,似乎CON是保留名称,不能用于文件夹/目录或文件名

以下

print "test" > Con.java

无效。

因此编译器无法创建Con.class并崩溃。

来自MSDN

  

请勿将以下保留的设备名称用作文件名:

     

CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9。同时避免使用这些名称后立即进行扩展;例如,不建议使用NUL.txt

答案 1 :(得分:7)

也许问题存在,因为CON是一个保留的文件名(它在MS-DOS上 - 见http://support.microsoft.com/kb/31157 http://www.computerhope.com/copyhlp.htm)

答案 2 :(得分:3)

你是如何编译的?在带有Java 1.6的Win7 32b上,我得到:

  

类型名称无效。 'Con'在此平台上是无效的名称。

答案 3 :(得分:2)

是的,它看起来像一个bug。它在我的

上汇编得非常好
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

Mac OS X上的环境。

如果您告诉我们您使用的是Sun(Oracle)JDK还是OpenJDK,也许我们可以提供更多帮助?

问题可能与类名(Con)和文件名(A)不同(它们应该相同),并且在单个文件中同一级别有两个类。无论如何,它在我的盒子上编译得很好。

答案 4 :(得分:1)

在java中,类名和文件名必须完全相同。在您的情况下,您的班级名称为Con,因此,您的班级文件必须Con.java。由于DemoCon是您的static void main(String[] args)类,因此您的java文件必须为DemoCon.java

答案 5 :(得分:0)

我将您的代码保存为DemoCon.java .

并将其作为

运行
javac DemoCon.java 

java DemoCon

o / p是

 x :2
    x :2