There's enough here for a thousand posts. Well, five or six, anyway. ;-)
For starters, see Immutable Value for a good explanation of why value objects should always be immutable, Use Factories To Build Objects to see how and why to avoid the
new keyword, Build Interface Implementation Pairs to see how to use interfaces everywhere, and No Null Beyond Method Scope to see how to put an end to those pesky
NullPointerExceptions (or at least to make them occur near the source of the problem).