[英]How to execute JAVA programs with Inner classes?
我的程序中有 3 个课程
1. LinkedListProgram : contains PSVM
2. LinkedList extends Node {
3. private class Node {
}
}
我正在通过以下命令编译java程序
javac -d bin .\LinkedListProgram.java
编译成功,我在我的 bin 文件夹中看到了 3 个 .class 文件
LinkedList$Node.class
LinkedList.class
LinkedListProgram.class
现在我想执行程序,我使用的命令是
java -cp bin LinkedListProgram
这给了我一个堆栈跟踪错误,我将其粘贴在下面
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 中看到
我觉得将整个代码粘贴到我的 OP 中不是一个好主意,因为代码有点冗长。 请转到上面的链接以获取完整代码。
出现问题是因为您试图从其父类扩展内部类。
LinkedList extends Node {
class Node{}
}
信息:私有内部类仅存在于其父类的上下文中,因此这意味着Node
在LinkedList
之外不可见。 甚至不在父类定义中!
但真正的问题不在于 Node 是私有的,
假设您将Node
类设为public
,这将允许您在定义您的父类时引用您的内部类,例如LinkedList extends LinkedList.Node
。
但这将导致从LinkedList
到自身的循环引用。 这是不允许的!
解决方案是将这两个类放在单独的文件中。
在您的情况下,您将所有类都放在一个文件中,只需将Node
类定义放在LinkedList
类定义之后(或之前)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.