I know on HN most people dont approach software development from a corporate or enterprise POV, but that's where the majority of CS grads end up working. At small, medium and large size corporate shops doing custom software usually based on outdated models and working with legacy systems. Java is perfect for that.
Ok, that was totally unfair. There is a lot of stuff that Java can do really well. And I'm not a developer by trade (I'm just a hobbyist who likes to tinker and in another life would probably be a mobile or front-end dev; maybe next decade if I'm bored with media), so I can't even really speak from expeienece implementing Java. As others have stated, it came among at the right time, perfectly timed with the explosion of "the web" and became really easy to be a drop-in for a lot of places for C++. Plus, it was portable, which is a huge thing when you have so many environmental variables.
Schools started to teach it as soon as they saw that it was what all the big businesses were adopting. It also happens to be a very easy language to teach, even if one could argue (and I would be one of those) that teaching C first would be a much better first-language just to get the fundamentals down. But I mean, it's not just colleges that teach Java, they started teaching Java (replacing VB, which was I "learned" (read: slept through)) to kids two years behind me back when I was in high school. And that was like 2001.
Many professors would like to teach something much purer (Smalltalk or Eiffel for OO, Lisp or Haskell for functional programming), but they also often have trouble forming a consensus on any of those. So it's easy to give in to the pressure from the industry, and simply teach Java.