Q:

OutOfBounds pero no veo porque

Es una función sencilla:
     - Tengo un array de 10 celdas con las dos primeras asignadas. 
     - un método fill(int n) que asigna valores al array.
     - y una excepción de tipo outofbounds que salta, así que algo debe andar mal escrito.
     - la creación de una clase con constructor es por motivos didácticos, que obviamente, si escribo
       esto, están justificados.
public class serie {

int[] series;
int cap;

public serie(int n) {        //constructor

    series= new int [cap];
    cap=n;

    series[0]=0;
    series[1]=1;
    }

public int fill(int n) {      //método llenado

    return series[n++]=series[n-1]+series[n-2];

}

public static void main(String[] args) {

    serie test=new serie(10);

     for(int i=2; i < 10; i++){
        System.out.println(test.fill(i));
     }

   }
}

A:

En el momento de instanciar el array, la variable que usas para dar extensión al array tiene un valor nulo.
Tienes que tener en cuenta que el flujo de ejecución va siempre de arriba a abajo, empezando por el método main, saltando a los distintos métodos y constructores y recorriéndolos de arriba a abajo. Para luego volver a donde sea que fuesen llamados para continuar el código desde la llamada hacia abajo.
Así pues, si sigues el flujo de ejecución te darás cuenta de qué valores tienen tus distintas variables. En un programa sencillo como este símplemente se puede seguir el flujo de ejecución de un vistazo. En programas más extensos es aconsejable usar el debugger del programa IDE que uses (en realidad se puede programar java con cualquier editor de texto, incluido el bloc de notas, pero siempre es preferible usar un IDE que facilita mucho las cosas y tienen ventajas como la ejecución del código línea a línea para hacer depuración de código)

