Java 静态块未运行,没有最终变量
我在这里使用API编写了以下代码:Java 静态块未运行,没有最终变量,java,static-block,Java,Static Block,我在这里使用API编写了以下代码: package org.midnightas.os.game.dots; import java.awt.Graphics2D; import org.midnightas.os2.Key; import org.midnightas.os2.MidnightasOS; import org.midnightas.os2.gameapi.Game; public class Dots extends Game { public Dots(Mid
package org.midnightas.os.game.dots;
import java.awt.Graphics2D;
import org.midnightas.os2.Key;
import org.midnightas.os2.MidnightasOS;
import org.midnightas.os2.gameapi.Game;
public class Dots extends Game {
public Dots(MidnightasOS midnightasos) {
super(midnightasos);
}
@Override
public void init() {
}
@Override
public void keyPressed(Key arg0) {
}
@Override
public void render(Graphics2D arg0) {
}
@Override
public void tick() {
}
static {
System.out.println("MOS Dots crashed.");
MidnightasOS.setGame(Dots.class);
}
}
静态块应该通过调用middnightasos.setGame(Class)来运行;
然而,这并没有发生。我还使用System.out进行了调试,但没有效果。
问题出在午夜吗?我会张贴它的代码,如果必要的话 我这样做是因为我试图用Linux和Raspberry PI创建一个人工操作系统。
这将是一个像游戏机男孩一样的游戏机。
我正在尝试加载所有游戏类,这样至少有一个类会使用
middnightasos.setGame(Class)代码>
感谢阅读。类加载器何时加载Dots类。它将加载到此类的第一个引用上。看看你有没有提到过这门课
找到一个类的所有子类型并加载它们
public类MainClass{
公共静态void main(字符串[]args){
ClassLoader ClassLoader=MainClass.class.getClassLoader();
反思=新的反思(“组织午夜”);
SET类中的静态块是在类加载器第一次加载类时执行的。有几种可能实现这一点。请考虑下面的类:
public class SomeClass {
static {
System.out.println("static block in SomeClass");
}
static void someMethod() {
System.out.println("some static method");
}
}
通过创建对象加载它:
SomeClass foo=newsomeclass();
通过调用静态方法加载它:
SomeClass.someMethod();
直接加载:
Class.forName(“SomeClass”);
这些只是您的一些可能性!请注意,您必须将包结构包括到第三种方法中(如果类在包some.package中,则它将是:class.forName(“some.package.SomeClass”)
静态块将在类加载器第一次加载Dots
类时立即执行。仅当您从该类调用任何引用(调用某些方法、创建对象等)时,它才会加载该类setGame在MidnightasOS中是一个静态方法吗?你能补充一下你是如何尝试加载Dots类的吗?动态地,我会尝试使用库@awesome show me。然后我如何加载所有扩展游戏的类?所有这些都必须是动态的。这太动态了,我不能使用反射吗?(我见过有人这样做过一次。)您可以使用此库查找所有子类型。但我认为您解决问题的方法是错误的。可能会在您的问题中添加有关为什么要这样做的详细信息。为什么要使用静态块。可能有人会给您提供更好的使用模式
public class SomeClass {
static {
System.out.println("static block in SomeClass");
}
static void someMethod() {
System.out.println("some static method");
}
}