What is the effect of attempting to compile and run this Java program that consists of two class definitions in separate files:
public class One
{
   public One()
   {  a = new int[NUM];
   }

   public int get(int i)
   {  return a[i];
   }

   private int[] a;
   public static final int NUM = 3;
}

public class Two
{
   public Two()
   {  b = new int[NUM];
      b[0] = 2;
   }

   public int get(int i)
   {  return b[i];
   }

   private int[] b;

   public static void main(String[] args)
   {  One o1 = new One();
      Two o2 = new Two();
      System.out.println(o1.get(0));
      System.out.println(o2.get(0));
   }
}
(a) The program doesn't compile.
(b) It compiles but, when run, gives a null pointer exception.
(c) It compiles but, when run, gives an array index out of bounds exception.
(d) It compiles and, when run, displays 0 and 2.
(e) It compiles and, when run, displays 0 and 0.

Select the most appropriate answer.