It’s really hard to choose. 1.1 was really a thing of beauty. It was simple, portable, and had a kick-ass core library. i.e. It was everything C/C++ wasn’t. (At the time, anyway.)
I actually stuck with 1.1 for quite awhile, as I felt that Sun had seriously screwed up Java with the 1.2 release. In hindsight, 1.2 was necessary, but I still tend to think that it would have been better if it was introduced piece-meal. That would have given the community more of a chance to give feedback and push Sun to keep it small, fast, and stable.
1.3 was what finally ripped me away from 1.2. It finally made remote objects usable, added neat APIs like JavaSound, and was all-around thin, stable, and fast. In other words, Sun cleaned up some of their 1.2 mess.
1.4 was a serious shock to the 'ol system. It introduced a whole new set of APIs that finally made every Java programmer’s dream come true: Full Screen games in Java! What more could you want? Ok, so it wasn’t exactly the most stable, but it worked, and it worked well.
1.5 almost seems like another language. Honestly, I kind of feel like Sun sold out to the “syntactic sugar” crowd on this one. I haven’t noticed any particular APIs that make me happy, and the JavaDocs have again doubled in complexity. (Anyone remember how simple 1.1 JavaDocs where?) On the bright side, JavaSound and Full Screen seem to work better than ever.