Статические переменные нужны для доступа к ним, без создания экземпляра класса. А вот зачем нужен static класс?
Ответ Статическим классом в java может быть только вложенный класс. Если класс отмечен как static, то он ведет себя, как обычный класс. например, есть класс А, вложенный статический класс B и вложенный (нестатический) класс С: public class A{ ... static public class B{ } public class C{ } } и мы хотим создать экземпляры этих классов во "внешнем" коде public class Test{ public static void main(String[] args) { A a = new A() // обычный класс A.B b = new A.B() // статический вложенный класс A.C c = a.new C() // вложенный класс, связан с экземпляром А // A.C c = new A.C() // синтаксическая ошибка (не скомпилится) } } или внутри статических методов класса А public class A{ ... static public class B{ } public class C{ } public static void main(String[] args) { A a = new A() // обычный класс A.B b = new A.B() // статический вложенный класс A.C c = a.new C() // вложенный класс, связан с экземпляром А // A.C c = new A.C() // синтаксическая ошибка (не скомпилится) } public static void test() { A a = new A() // обычный класс A.B b = new A.B() // статический вложенный класс A.C c = a.new C() // вложенный класс, связан с экземпляром А // A.C c = new A.C() // синтаксическая ошибка (не скомпилится) } } На мой взгляд использование статического класса может быть уместно, как небольшой класс, который по смыслу тесно связан с "основным" внешним классом. Например: public class Tree{ static public class Node{ } } В этой ситуации так же можно вынести вложенный класс в обычный и переместить оба класса в отдельный package. Единственным отличием вложенного статического класса от обычного, которое мне видится, - это более снисходительное отношение к видимости методов и полей между вложенным классом и его внешним классом. Например: public class A { private void privateMethod(){ B b = new B() b.privateMethod() // есть доступ к приватным методам/полям } static public class B { private void privateMethod(){ A a = new A() a.privateMethod() // есть доступ к приватным методам/полям } } } Ссылка на документацию: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html