Did you check the API for the constructor you are invoking at line 5? It says:
public ArrayList(int initialCapacity)
Constructs an empty list with the specified initial capacity.
So, basically, until you add values in your list, the size of the list is 0. Hence, statement inside for loop is not executed, and a.get(a.size() - 1) is actually a.get(-1), and that's not valid index so you get an exception.
The quieter you are, the more you are able to hear.
Specifying the initial capacity in the constructor doesn't mean the list will have that many elements in it, it just specifies the maximum number of elements that can be added before the backing array must be resized.
Therefore, the ArrayList will be constructed with a backing array of length 5 but the array will be empty and the ArrayList size will be 0 and so the for loop won't add any elements and hence your attempt to get the last element (a.size()-1) fails as the ArrayList is empty.
Joined: Feb 04, 2010
I modify my test program so that it will store the integer from 0 to 4.
However, the output is
a1  size 5 
I expect to see integer 1 and 4 but get "".
How to fix this program?
Try creating an array list and printing it out. You find you get a pair of square brackets, with all the elements inside. Maybe you have got empty lists from those get() calls, and they simply print out the pair of square brackets. If you look for the array lists’s toString method, you find this, which tells you about the square brackets. It doesn’t say that an empty List prints as , but you can probably validate that with