why is this code working?
public class Final {
    public final int[][] arr = new int[2][];
    Final(){
        arr[0] = new int[4];
        arr[0] = new int[5];
        arr[1] = new int[4];
        }
    public static void main(String[] args) {
        Final fi = new Final();
        System.out.println(fi.arr[0].length);
        System.out.println(fi.arr[1].length);
    }
}
whereas the following does not work (which is correct as I assume).
public class Final {
    public final int[] arr;
    Final(){
        arr = new int[4];
        arr = new int[5];
        }
    public static void main(String[] args) {
        Final fi = new Final();
        System.out.println(fi.arr.length);
    }
}
When is the final statement "kicking in" ?
 
     
     
     
    