Hola Francisco, sobre la pregunta a) correcto, no compila porque el objeto no está inicializado. Declararlo es solo una reserva de memoria, pero no se puede invocar algo que no existe. Si lo intentamos hacer podemos obtener un error de tipo java.lang.nullPointerException o similar.
import java.util.ArrayList;
public class Programa3 {
public static void main(String arg[]) {
ArrayList<Integer> unaLista;
unaLista.add(1);
}
}
Sobre la pregunta b), correcto pero no porque el método pueda disponer de una variable local. Puede tenerla o no tenerla, no es necesario que haya una variable local. En realidad, un constructor puede estar vacío en determinadas circunstancias y esto no supone ningún problema siempre que sepamos lo que hacemos.
La pregunta c) preguntaba si la llamada al método se hacía sobre un objeto declarado y creado. Efectivamente es así, aunque en este caso la declaración y creación la hace automatizadamente java en segundo plano, no la hacemos nosotros.
Saludos