Leere Finals sind ebenfalls erlaubt, d. h., der Initialwert muss nicht bei der Deklaration angegeben, sondern kann auch noch zu einem späteren Zeitpunkt zugewiesen werden. Wichtig ist hierbei, dass erst nach der Zuweisung lesend auf die Konstante zugegriffen werden darf. Bei einer Verletzung dieser Regel liefert der Compiler eine Fehlermeldung.
Im folgenden Beispiel wird ein Array als leeres Final vereinbart, um sicherzustellen, dass genau eine Zuweisung in der Methode erfolgt. Bei Arrays muss genauso wie bei Objekt-Referenzen beachtet werden, dass die Elemente wie sonst auch mehrmals Zuweisungen erhalten können.
public int[] calcSquares(int[] a) {
// Lokale Variable als leeres Final
final int[] squares;
// Einmalige Zuweisung
squares = new int[a.length];
// Zuweisung an Elemente ist erlaubt!
for(int i = 0; i < a.length; i++)
squares[i] = a[i]*a[i];
return squares;
}
Im Gegensatz zu Datenelementen können lokale Variablen nicht als static und somit auch nicht als final static vereinbart werden.