簡體   English   中英

使用嵌套類執行 Java 代碼時出錯

[英]Error when executing Java code with nested class

新手在這里。 嘗試執行具有嵌套類的 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.javaShadowTest.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 字節空閑

javac命令的輸出和同一目錄下新創建的類文件

  • 在執行ShadowTest類時,使用java ShadowTest命令。 我得到了預期的輸出。
    輸出:
    D:\\test> java ShadowTest
    x = 23
    這個.x = 1
    ShadowTest.this.x = 0
    java命令的輸出及其輸出

  • 為了重現您的問題,我嘗試刪除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*

刪除內部類的類文件后執行主類。

請分享您用於編譯和執行該類的完整錯誤消息和命令。

您始終可以使用javac filename命令編譯該類。 然后使用命令java main_class_name執行代碼

javac ShadowTest.java
java ShadowTest

/** 輸出 **/

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

內部類(如果您的類中存在)​​將被編譯並且類文件將為 ClassName$InnerClassName。

使用此在線編譯器,它可以無錯誤地執行您的代碼

你的代碼:

在此處輸入圖片說明

輸出 :

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM