Para você pegar o length dentro de um array mutidimensional basta você se lembrar de uma coisa:
O int[][] significa que int[] é um array de int[], portanto, cada elemento de int[] é um objeto do tipo int[].
Considerando isso, você pode ter acesso ao length da seguinte maneira:
int[][] m = new int[20][30];
int tam1 = m.length;
int tam2 = m[0].length; // Isso te daria o length do int[] dentro de m[0].
Resposta 2:
Não é possível. Arrays, em Java, têm tamanho fixo.
O que você pode fazer é descartar um array criado com 10 elementos e criar outro de tamanho diferente utilziando new tipo[n]…
Por exemplo:
int[] m = new int[20];
m = new int[30];
o primeiro objeto criado pelo new int[20] iria pro garbage, e m faria referência agora ao novo array de 30 elementos. Se você implementar um algoritmo para copiar os elementos de um objeto[] para o outro, é equivalente a ter um “setLength” da vida. Acho que em java mesmo tem a classe Arrays com alguns recursos bacanas pra fazer cópia, busca binária, etc. Não testei, apenas vi rapidamente.
Tudo uma questão de lógica.
Imagina o array multi como uma tabela (linhas e colunas).
Basta pegar uma linha da tabela e contar quantas colunas ela possui.
O exemplo do hiram deixa as coisas bastantes claras ^^