java – 构造函数必须在方法返回之前调用super()或this()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 构造函数必须在方法返回之前调用super()或this(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1798字,纯文字阅读大概需要3分钟。
内容图文
![java – 构造函数必须在方法返回之前调用super()或this()](/upload/InfoBanner/zyjiaocheng/753/cbbe1782cdaa4a1c9dcdc6772d78bbff.jpg)
我收到此错误:
Exception in thread "Thread-0" java.lang.VerifyError: Constructor must call super() or this() before return in method JGame.Util.KeyboardMap.<init>()V at offset 0
at JGame.Room.Room.keyboardEventTests(Room.java:81)
at JGame.Room.Room.run(Room.java:54)
at java.lang.Thread.run(Thread.java:722)
当我的应用程序加载时,它立即调用此方法(KeyboardMap.map是一个空的HashMap).
这是方法(第54行调用此方法this.keyboardEventTests();):
protected void keyboardEventTests(){
for(Map.Entry ap : KeyboardMap.map.entrySet()){ // Line 81
Mapping mp = (Mapping)ap.getValue();
if(mp.doing){
mp.run();
}
}
}
这是KeyboardMap类.
package JGame.Util;
import java.util.HashMap;
import java.util.Map;
public class KeyboardMap{
public static Map<String, Mapping> map = new HashMap<>();
public static void set(String key, Boolean value, Runnable run){
Mapping mp = new Mapping();
mp.doing = value;
mp.run = run;
KeyboardMap.map.put(key, mp);
}
public static Mapping get(String key){
return KeyboardMap.map.get(key);
}
}
为什么我会收到这个错误,我怎么能摆脱它呢?
解决方法:
Why am I getting that error, and how can I get rid of it?
最大的线索是,这是一个VerifyError,而不是编译错误.这意味着JVM找到了一个字节码文件,其中一个构造函数没有正确链接.这些(实际上)是格式错误的字节码.
怎么会发生这种情况?
>它不会发生在以正常方式(仅)编译的Java类中.编译器将自动将隐式super()调用插入到未明确链接的任何构造函数中.
>如果这是Java代码,则:
>该类是使用损坏的编译器编译的(不太可能!),或
>有些东西在编译后调整了字节码.
>如果是其他语言,那么第一个嫌疑人将是“字节码的其他语言”编译过程.
我认为你遇到了这个问题,因为你的单元测试使用了一个模拟框架,而模拟框架正在使用“字节代码工程”将一些内容注入到被测试的类中.执行此操作的代码“出错了”,结果是无法编译的字节码.
这显然是通过重建来解决的,但这与此解释并不矛盾.重建可以清除由模拟框架注入的破坏的检测代码.下一次,框架可以“正确”.
内容总结
以上是互联网集市为您收集整理的java – 构造函数必须在方法返回之前调用super()或this()全部内容,希望文章能够帮你解决java – 构造函数必须在方法返回之前调用super()或this()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。