Not even taking game development into the equation, Java is a horrible language. I've started and stopped Android development so many times because I quickly got sick of the thick layers of boilerplate and OOP madness.
If you need to use the JVM for whatever reason I'd recommend Scala instead. It's a far more modern language with a very clean syntax that doesn't bombard you with cruft.
Funny story relevant to this thread:
When I implemented a first person dungeon crawler in Java for Android in 2012, it suffered from very unstable performance on my Galaxy S2. After profiling, I fixed it to a locked 60 FPS by basically implementing manual reuse stacks (actually fixed-size arrays) for every single object type which needed dynamic per-frame allocation/deallocation.
Of course, once you do that you are actually dealing with memory allocation in a way which is more cumbersome than even in vanilla C, never mind C++ and its myriads of conveniences.
Do they still teach Java as the primary programming language at high schools and universities? I'd wager the only reason most schools even touch Java is because of its unfortunate ubiquity in industry.
We switched away from almost Java-only to a C (low-level/algorithms101/OS/computer graphics) / Haskell (languages/logic/advanced algs) / Java (other stuff) curriculum in 2011. Thank god.
There's no such thing as a bad programing language, just bad uses of programming languages. Every language has its good points and bad points. (this from someone who has used about 20 languages since 1993)
I mostly agree in principle, that's why I think teaching only a single language is the very worst thing you can do. However, there are languages (like Java
-- or perhaps less controversially, say, COBOL) for which I can't really imagine many use cases where you wouldn't be better served by another language. Except for maintaining Java software (poor suckers).
I can't be the only one here who prefers C over C++. I write all my games in it. OOP is the devil
OOP is useful sometimes, but it's often overused (the same "all you have is a hammer" issue applies to using only a single programming paradigm as with knowing only a single language).
What C++ (especially modern C++) does, is give you a toolbox you can write a very nice program in using almost any paradigm (or mixture of paradigms) you desire. Between classic object oriented class hierarchies, templates and template meta-programming, more or less the entirety of C, neatly integrated lambda functions/closures since C++11, and more, there's a way to implement almost any program or library neatly and well-performing in C++.
There's also more than enough material to shoot off your entire leg if you are not careful, and enough to know that after ~16 years of programming C++ and ~5 years of writing a C++ compiler I still learn new things about it. It's really beautiful in a baroque way.