发布
社区首页 >问答首页 >如何使用内部类执行JAVA程序?

如何使用内部类执行JAVA程序?
EN

Stack Overflow用户
提问于 2015-11-01 04:55:14
回答 1查看 103关注 0票数 2

我的程序里有3节课

代码语言:javascript
代码运行次数:0
复制
1. LinkedListProgram : contains PSVM 
2. LinkedList extends Node { 
     3. private class Node {
       }   
   }

我正在用下面的命令编译java程序

代码语言:javascript
代码运行次数:0
复制
javac -d bin .\LinkedListProgram.java

编译成功,我在我的bin文件夹中看到3个.class文件

代码语言:javascript
代码运行次数:0
复制
LinkedList$Node.class
LinkedList.class
LinkedListProgram.class

现在我想执行这个程序,我使用的命令是

代码语言:javascript
代码运行次数:0
复制
java -cp bin LinkedListProgram

这给了我一个堆栈跟踪错误,我将其粘贴到下面

代码语言:javascript
代码运行次数:0
复制
Exception in thread "main" java.lang.NoClassDefFoundError: Node
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at LinkedListProgram.main(LinkedListProgram.java:137)
Caused by: java.lang.ClassNotFoundException: Node
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 13 more

如何解决这个问题?根据我的实验,如果我不在另一个目录中生成.class文件,java程序就可以正常运行。

我从bin文件夹运行程序的方式有什么问题?

完整的源代码可以在Github中看到

我觉得把整个代码粘贴到我的操作中不是一个很好的主意,因为代码有点长。请转到上面的链接获取完整的代码。

EN

回答 1

Stack Overflow用户

发布于 2015-11-01 06:30:56

出现问题的原因是您试图从父类扩展内部类。

代码语言:javascript
代码运行次数:0
复制
LinkedList extends Node {
    class Node{}     
}

信息:私有内部类在其父类的上下文中仅存在于中,因此这意味着NodeLinkedList外部不可见。甚至在父类定义中都没有

但真正的问题不是Node是私有的,

假设您将Node类设置为public,这将允许您在定义父类时引用内部类,如下面的LinkedList extends LinkedList.Node所示。

但这将导致从LinkedList到自身的循环引用。这是不允许的

这个问题的解决方案是将这两个类放在单独的文件中。

对于将所有类都放在一个文件中的情况,只需将Node类定义放在LinkedList类定义之后(或之前

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33456533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档