Зачем при иницализации static переменных, требующих вычисления, требуется static блок?
Ну это у вас просто арифметические операции. А если нужно произвести более сложную инициализацию статического поля? Например с вызовом метода, который бросает исключение? Тогда это делается в статическом блоке. 
Но лучше так не делать. Сложную инициализацию лучше выносить в отдельных приватный стат метод и его уже присваивать переменной.
static int a = intA();
private static int initA() {
   ...
}
А что если вам нужно нечто большее, чем просто умножить числа?
К примеру статичный массив с данными?
stackoverflow.com/questions/2943556/static-block-i... - тут разные примеры и объяснения