A few things that come to mind:
• Runs everywhere. Java runs on more platforms than any other language. This reduces development costs when support for more than one platform is required.
• Rich run time library. Java has a very feature rich run time. This reduces development costs because developers don't have to continually reinvent (and debug) the wheel.
• Good choice of IDE's. There are a number of good IDE's out there for Java, with all the necessary tools a developer needs. (Syntax highlighting, auto-completion, code refactoring, etc.).
That being said, Java is not my preferred language. I prefer C# when multi-platform support isn't a requirement. Reasons I prefer C#:
• Java as a language has stagnated since about 2004. C# on the other hand as evolved steadily since it was first introduced in 2002. It contains a significant set of language features that do not exist in Java (We may finally see some of these in Java 8. Maybe.)
• Proper support for getters and setters. All those getFoo setFoo methods in Java drive me batty. C# allows you to reference Foo as a first class property.
• Operator overloading. Without it, you can't compare things like strings with the intuitive ==, you need the silly Equals method.
• Functional programming support. This is where Java is really lagging (was promised for Java 7, but delayed to 8).
• Fantastic IDE.
But there has never been a programming language that is better than all the rest. Different languages are best suited for different tasks.