Исключения должны быть исключительными. Он не предполагает, что исключение выдается всегда.
Компилятор использует слово may
, так как не может определить, можете ли вы получить доступ к неинициализированной переменной. Кроме того, вы можете изменить метод, не перекомпилируя этот класс, и любое сделанное им предположение будет неверным.
Если вы хотите бросить исключение всегда, вы можете сделать
final int var1;
if ( isSomethingTrue ) {
var1 = 123;
} else {
throw exceptionMethod();
}
int var2 = var1;
// later
public Exception exceptionMethod() {
return new Exception("Complex-Exception-String");
}