簡體   English   中英

如何從.class重新創建Java類?

[英]How to recreate java classes from .class?

我有一些帶有很多.class java類的程序包,我可以以某種方式重新創建嗎? 還是行家?

或者我該怎么做才能使用此.classes的主類,但是由於.class擴展名而看不到它?

我試圖將.class擴展名更改為.java,但是編碼會出錯...重命名為.java后無法讀取。

還是可以從中依賴? 或最佳解決方案是什么?

我有這個主要的:

public class Main {
    public static void main(String[] args) {
        Snake snake = new Snake();
        snake.addAI(new MintaAi(), Color.red.darker());
        snake.addAI(new MintaAi(), Color.blue.darker());
        snake.start();
    }
}

而且我必須運行它,但我需要的只是.class擴展名。

假設您正在談論.class文件提供的一些第三方輸入; 查看 Java源代碼的一種簡單方法是將這些類文件放入JAR文件。 並將該JAR文件添加到IntelliJ中的項目設置中。 當您知道在該庫中出現的類上按“ F3”時,IntelliJ將反編譯該類文件的內容並將其顯示給您。

另外,您可以研究命令行工具,例如jd-gui 您必須了解所有這些技術都在一定程度上受到限制。 例如,當混淆器觸摸字節碼時,反編譯器可能很難顯示任何有用的信息。

但真正的答案是:您想退后一步,對打算使用的概念有所了解。 就像“ .java”一樣,表示Java源代碼; .class的意思是“從Java源代碼編譯的字節碼”。

當然:當Snake或MintaAi是編寫的類時; 那么應該將源代碼放在某處。

使用bytecodeview http://bytecodeviewer.com/ 它包含幾種類型的反編譯器。 您可以更改反編譯器並查看反編譯代碼質量的預覽。 如果代碼量很小並且不復雜,則可以很好地工作。

壞部分是:泛型(類型擦除),非常壞的部分是反射(代理調用),真正壞的部分是在類文件中使用字節碼注入。

暫無
暫無

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

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