Java 静态块未运行,没有最终变量

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

我在这里使用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(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");
        }
    }