Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现接口时出现奇怪的异常_Java - Fatal编程技术网

Java 实现接口时出现奇怪的异常

Java 实现接口时出现奇怪的异常,java,Java,我在线程“main”java.lang.NoClassDefFoundError:A(错误名称:A)中遇到异常,我不知道这是由什么引起的 public class Test { public static void main(String[] args) { new B(); } } interface a { } class A implements a { } class B extends A { } 编辑:在联机编译器中,它编译当Java编

我在线程“main”java.lang.NoClassDefFoundError:A(错误名称:A)中遇到异常,我不知道这是由什么引起的

public class Test
{
    public static void main(String[] args)
    {
        new B();
    }
}

interface a { }

class A implements a { }

class B extends A { }

编辑:在联机编译器中,它编译当Java编译源代码时,它会创建多个
.class
文件。例如,它为
公共类测试创建
Test.class
,为
接口a创建
a.class
,为
类a创建
a.class
。这里的问题是某些操作系统中的文件名不区分大小写。这意味着操作系统将
a.class
a.class
视为同一个文件,因此一个文件将覆盖另一个文件

由于区分大小写,联机编译器很可能将这些文件名视为不同的文件名

这里的解决方案是使用不同的名称,以便在操作系统级别避免这些名称冲突


已建立的Java约定是以大写字母开头所有类和接口名称。如果遵循此约定,则可以避免此问题。

如果运行
javac
path/to/your/file
,则应在该目录中看到java编译器创建的
.class
文件列表。这种方法的问题是接口和类的名称重复,即A(不区分大小写),因此只创建一个
.class
。通过更改接口或类的名称重试,您的问题应该会消失。

这是一个文件吗?接口和类应该大写,无论如何是的,命名为Test.javaAnd,您使用什么来运行该文件?您的Java版本是什么?您使用的是什么操作系统?这是Windows吗?此外,Java中的类型名称应始终大写。“为接口a测试$a.class”为什么
a
不是嵌套类型。@Pshemo我想Java编译器会为私有类生成带有$syntax的类文件。在那个细节上我可能弄错了。潜在的问题仍然是操作系统如何处理文件名中的大小写差异。“因此,对于私有类,Java不会使用$syntax创建文件”嗯,私有类只能存在于其他类中(嵌套),因此它们将以
OuterClass$InnerClass
的形式出现,但这里的类不是私有的,它们没有指定的访问修饰符,因此它们是包私有的-它们属于整个包(只允许访问同一包中的元素)。@Pshemo那么生成的类文件的名称是什么?