To answer your question; it should be absolutely fine to have static fonts. As long as you remember to dispose of them when you exit the game.
What I would recommend though is using the AssetManager (like spectacularbob mentioned in his comment). In reality you should probably use the AssetManager for all of your assets (music, textures, atlases, fonts etc.), because it simplifies the process of disposing of assets by only having to dispose of the AssetManager instead of every single asset, and it makes it easy to load assets on-demand from AssetDescriptors (look at this official tutorial).
To show how AssetDescriptors could be implemented in a static way, take a look at this snippet from one of my projects:
public static class Assets { ////////// Skins ////////// public static final AssetDescriptor<Skin> SKIN = new AssetDescriptor<Skin>("skins/default.json", Skin.class); ////////// Textures ////////// public static final AssetDescriptor<Texture> LOGO = new AssetDescriptor<>("graphics/meta/logo.png", Texture.class); public static final AssetDescriptor<Texture> TEST_TEXTURE_BLOCK = new AssetDescriptor<>( "graphics/block/sample.png", Texture.class); ////////// Fonts ////////// // In this project I was using FreeTypeFont, but using normal BitmapFonts is fine as well! public static FreeTypeFontGenerator FREETYPE_GENERATOR = new FreeTypeFontGenerator( Gdx.files.internal("fonts/bricks.ttf")); ////////// Music ////////// public static final AssetDescriptor<Music> INTRO_MUSIC = new AssetDescriptor<Music>("audio/music/intro.mp3", Music.class); ////////// SHADERS ////////// public static final ShaderProgram DEFAULT_SHADER = SpriteBatch.createDefaultShader(); }
Then you can load them using AssetManager#get(AssetDescriptor<T> assetDescriptor):
assetManager.get(Assets.LOGO); //Or whatever asset you want.