Есть утверждение: статический конструктор имеет единственное назначение - присваивать исходные значения статическим переменным.
Глупость, например в приложении Android в нем еще реализуют загрузку нативных библиотек - JNI, а где еще, в "экземплярном" конструкторе - нельзя, на каждый экземпляр не нужна новая копии библиотеки, это утечка ОЗУ, в main() - тоже не совсем то, да и нет main() на Android.
если я могу присваивать значения статическим переменным при их объявлении в классе?
Не любым, например все операции должны поддерживать Fluid то есть чтобы все сделалось в одну инструкцию (строку), вообще-то в байт-коде в любом случае сгенерируется статический конструктор, но в синтаксисе всегда разрешено далеко не все что возможно в байт-коде.
Зачем нужно создавать статический конструктор
Как правило все же не нужно, радуйтесь. :) Хотя избавляться от того что не мешает - это уже глупость.