if you are planning on going into games programming, Java is not for you. Java is best for application software, like a tax calculator or a spreadsheet or a word processor, and it's best if you have a lot of platforms you want to support, while C\++ can be very portable it's up to the API writers to make sure it is, this is why I like my C, because ultimately the programmer is in charge. however, there is a trade off in terms of easy vs lot-of-control (and thus an ability to take advantage of hardware). now when I say a lot of platforms, I don't mean PC, Linux, and Mac, a Java program "will" run on any platform that has an interpreter written for it, from a PC to a playstation to a car sterio to a cellphone, and supposedly it will run the same on all them, but that's up to the person who writes the Java interpreter, not you.
now back to my first point, games need a lot of speed and in Java it is designed around you not being able to get to any hardware, it's a "good" thing in the Java mindset that you can't use memory tricks to copy whole arrays of data directly in one call (because Java is object orientation to the max, memory doesn't exsist anymore, just objects and objects need to know how to copy, so you have to go one at a time) for example. I understand were they are coming from, but I think they just took it WAY THE **** too far. you absolutely cannot take advantage of hardware _ever_, this is both due to Java's OO philosophy and the fact that it's platform independent (if hardware is undefined you can't take advantage of it), for things ware cross platform homogony is more important than speed, this can be a good thing (even if I'm uncomfortable with the fact that you are forced not to go low level for a particular platform). for a game of any complexity this is unacceptable.