如何运行非由编译器创建的用户创建的类文件

时间:2013-12-30 18:48:46

标签: java

我在记事本中打开了类文件。复制它的内容并粘贴到另一个记事本中并使用“.class”扩展名保存在同一个类名中。然后我尝试运行那个新的类文件并将错误记录为。

Exception in thread "main" java.lang.UnsupportedClassVersionError: print : Unsupported major.minor version 8242.8224
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        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)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

2 个答案:

答案 0 :(得分:5)

类文件是二进制文件,因此您可能复制了它的损坏视图。除非您愿意学习JVM的字节码,否则您不想手动处理Java类文件。

如果您真的想这样做,我建议您购买一个可以复制和粘贴的十六进制编辑器。

修改

另一件事,除非你正在编写一个编译器或类似Hibernate的东西,在运行时真的弄脏了类文件,否则没有价值。这意味着操作字节码几乎没有正常的商业案例,你几乎总是会引入一系列的“WTF你在想什么?!”如果你没有正确地并且有充分的理由将错误放入库或应用程序中。一个特别的原因是Java和JVM字节码的关系很像C / C ++和Assembly。当然你可以解压缩一个C / C ++应用程序并抛出一些手工编码的程序集。但是你可能会在应用程序中引入不可判断的错误(这些错误与你的手工干扰字节码/汇编到应用程序有关,而不是你用高级语言编写的代码库中的代码)。

答案 1 :(得分:-1)

这意味着您的javac版本与您的java版本不同。见

How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version