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

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

在此处输入图像描述

这是程序的代码。

 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 not foundexception。 A.java是文件名…我们做了一个小编辑,并创建了一个名为A.java的公共类,但结果是一样的。 我们进一步发现问题在于编译器。

在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

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

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

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

是的它看起来像一个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 )不同(它们应该是相同的),并且在单个文件中同一级别有两个类。 无论如何,它在我的盒子上编译得很好。

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

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

并把它作为

 javac DemoCon.java java DemoCon 

o / p是

  x :2 x :2