noclassdeffounderror(java字符串连接)为什么会出现这种异常?
这是我的简单代码
class atmPin{
public static void main(String[] args) {
int x = 0;
System.out.println("hi there"+x);
}
}
当我运行它时,我得到了这个异常错误
java atmPin
Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
at atmPin.main(atmPin.java:6)
Caused by: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
... 1 more
Caused by: java.lang.ClassNotFoundException: java.lang.invoke.StringConcatFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
这与java版本有关吗?我不知道为什么会这样。这是一件很简单的事情( 即使使用字符串也会得到相同类型的异常。 例如
String x = "";
x += "a";
# 1 楼答案
java.lang.invoke.StringConcatFactory
是出现在Java 9中的一个类,用于实现JEP 280 (Indify String Concatenation),该类更改javac
编译器的行为,以便它将invokedynamic
指令与给定类一起用于字符串关联。因此,这个错误的原因很可能是使用JDK9或更高版本的javac
进行编译,同时在Java8或更低版本(或者使用自定义Java运行时)下运行此代码为了解决这个问题,可以使用另一个版本的编译器,或者为编译器指定另一个版本,或者应该使用另一个JRE来运行编译后的类