使用嵌套 class 执行 Java 代码时出错
Error when executing Java code with nested class
这里是新手。尝试执行具有嵌套 class 的 Java class 并且我不断得到这个
Error: Could not find or load main class .
Caused by: java.lang.ClassNotFoundException
当我编译源代码时,我得到了两个新的.class文件; ShadowTest$FirstLevel.class 和 ShadowTest.class。当我尝试执行其中任何一个时,都会出现错误。请帮忙。
这是代码
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
public static void main(String... args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}
}
您始终可以使用 javac filename 命令编译 class。然后用命令 java main_class_name
执行代码
javac ShadowTest.java
java ShadowTest
/** 输出 **/
x = 23
this.x = 1
ShadowTest.this.x = 0
内部 classes,如果您的 class 中存在任何内容,将被编译并且 class 文件将为 ClassName$InnerClassName。
在线使用这个compiler,它正在执行你的代码,没有错误
您的代码:
输出:
我尝试按照以下步骤重现您遇到的问题。
- 我用你的代码创建了一个 java 文件“ShadowTest.java”。
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
public static void main(String... args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}
}
使用 javac ShadowTest.java 编译了 ShadowTest.java,创建了两个 class 个文件
D:\test>javac ShadowTest.java
D:\test>目录
驱动器 D 中的卷是 MonWork
卷序列号是 3A72-52A4
D:\test目录
17-07-2021 13:01。
17-07-2021 13:01 ..
17-07-2021 13:01 901 ShadowTest$FirstLevel.class
17-07-2021 13:01 529 ShadowTest.class
17-07-2021 13:01 539 ShadowTest.java
3 个文件 1,969 字节
2 个目录 55,102,857,216 字节空闲
output of javac command and newly created class files in the same directory
在执行 ShadowTest class 时,使用 java ShadowTest 命令。我得到了预期的输出。
输出:
D:\test>java ShadowTest
x = 23
this.x = 1
ShadowTest.this.x = 0
output of java command and its output
为了重现您的问题,我尝试删除 ShadowTest$FirstLevel.class 文件并执行 java ShadowTest。但是没有得到你得到的确切错误。
Error: Could not find or load main class . Caused by: java.lang.ClassNotFoundException
*D:\test>del ShadowTest$FirstLevel.class
D:\test>java ShadowTest
Exception in thread "main" java.lang.NoClassDefFoundError: ShadowTest$FirstLevel
at ShadowTest.main(ShadowTest.java:18)
Caused by: java.lang.ClassNotFoundException: ShadowTest$FirstLevel
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more*
executing main class after deleting the class file for the inner class.
请分享您用于编译和执行 class.
的完整错误消息和命令
这里是新手。尝试执行具有嵌套 class 的 Java class 并且我不断得到这个
Error: Could not find or load main class .
Caused by: java.lang.ClassNotFoundException
当我编译源代码时,我得到了两个新的.class文件; ShadowTest$FirstLevel.class 和 ShadowTest.class。当我尝试执行其中任何一个时,都会出现错误。请帮忙。
这是代码
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
public static void main(String... args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}
}
您始终可以使用 javac filename 命令编译 class。然后用命令 java main_class_name
执行代码javac ShadowTest.java
java ShadowTest
/** 输出 **/
x = 23
this.x = 1
ShadowTest.this.x = 0
内部 classes,如果您的 class 中存在任何内容,将被编译并且 class 文件将为 ClassName$InnerClassName。
在线使用这个compiler,它正在执行你的代码,没有错误
您的代码:
输出:
我尝试按照以下步骤重现您遇到的问题。
- 我用你的代码创建了一个 java 文件“ShadowTest.java”。
public class ShadowTest { public int x = 0; class FirstLevel { public int x = 1; void methodInFirstLevel(int x) { System.out.println("x = " + x); System.out.println("this.x = " + this.x); System.out.println("ShadowTest.this.x = " + ShadowTest.this.x); } } public static void main(String... args) { ShadowTest st = new ShadowTest(); ShadowTest.FirstLevel fl = st.new FirstLevel(); fl.methodInFirstLevel(23); } }
使用 javac ShadowTest.java 编译了 ShadowTest.java,创建了两个 class 个文件
D:\test>javac ShadowTest.java
D:\test>目录
驱动器 D 中的卷是 MonWork
卷序列号是 3A72-52A4
D:\test目录
17-07-2021 13:01。
17-07-2021 13:01 ..
17-07-2021 13:01 901 ShadowTest$FirstLevel.class
17-07-2021 13:01 529 ShadowTest.class
17-07-2021 13:01 539 ShadowTest.java
3 个文件 1,969 字节
2 个目录 55,102,857,216 字节空闲
output of javac command and newly created class files in the same directory
在执行 ShadowTest class 时,使用 java ShadowTest 命令。我得到了预期的输出。
输出:
D:\test>java ShadowTest
x = 23
this.x = 1
ShadowTest.this.x = 0
output of java command and its output为了重现您的问题,我尝试删除 ShadowTest$FirstLevel.class 文件并执行 java ShadowTest。但是没有得到你得到的确切错误。
Error: Could not find or load main class . Caused by: java.lang.ClassNotFoundException
*D:\test>del ShadowTest$FirstLevel.class
D:\test>java ShadowTest
Exception in thread "main" java.lang.NoClassDefFoundError: ShadowTest$FirstLevel
at ShadowTest.main(ShadowTest.java:18)
Caused by: java.lang.ClassNotFoundException: ShadowTest$FirstLevel
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more*
executing main class after deleting the class file for the inner class.
请分享您用于编译和执行 class.
的完整错误消息和命令