I think you're trying to optimize memory usage. Right? But keeping them uninitialized and only initializing them on requirement doesn't provide much difference in execution speed or performance and also increases headache in debugging.
So everytime you want to use them, you've to check for null like
if (a == null)
a = new ArrayList<ObjectA>();
But writing this at every time you need to access the object 'a' will be definitely a headache. Otherwise you get several NPE's all over your code and will take long time for debugging.
Even if you've ensured that you've checked all the way in your code, it won't gain you much performance. If you need to check for this in a loop, then every loop you lose some performance in the 'if' clauses while checking for null.
I won't advise using uninitialized objects. Just initialize them and you've found your AC Room.