and I have been paying the bills with it for the past 5 years and I work at a company that is heavily invested in Java.
Java is the Windows of programming languages. It looks nice but when you actually try to use it seriously it sucks. The Java type system is a joke, they still haven't delivered generics, and you can forget about them ever dealing with the primitive-object inconsistencies. The development model is still in the dark ages, with files, compile, deploy cycle, etc. With an OO language why are developers dealing with files and classpaths, etc. there should be a higher level abstraction (something like VA Java taken from Smalltalk)
I come from a Smalltalk background, and when I look at the elegance of Smalltalk and compare it to Java, it makes me sick. The Java solution for so many problems is code generation. For example, the need for something like closures (blocks in Smalltalk) resulted in inner classes (not nearly as useful as Smalltalk blocks and much uglier) which are just a compiler trick. The upcoming generics support will again be a compiler trick, where the compiler will "magically" generate all the casts for you, whoopee.
Java has contributed little or nothing original, it has taken bits and pieces from different places, unfortunately the wrong bits and pieces.