微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用嵌套类

如何解决使用嵌套类

这里是新手。尝试执行具有嵌套类的 Java 类,但我一直得到这个 Error: Could not find or load main class . Caused by: java.lang.classNotFoundException 当我编译源代码时,我得到了两个新的 .class 文件ShadowTest$FirstLevel.classShadowTest.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);
    }
}

解决方法

我尝试按照以下步骤重现您遇到的问题。

  • 我已经使用您的代码创建了一个 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,创建了两个类文件


    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 类时,使用 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。但没有得到你得到的确切错误。

错误:无法找到或加载主类。引起: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.

请分享您用于编译和执行该类的完整错误消息和命令。

,

您始终可以使用 javac filename 命令编译该类。然后使用命令 java main_class_name

执行代码
javac ShadowTest.java
java ShadowTest

/** 输出 **/

x = 23
this.x = 1
ShadowTest.this.x = 0

内部类(如果您的类中存在任何内部类)将被编译,类文件将为 ClassName$InnerClassName。

,

在线使用compiler,它可以无错误地执行您的代码

您的代码:

enter image description here

输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。