Welcome to the huge sprawling mess that is our Java page.
Java really shines in a couple of areas, particularly documentation: the documentation of the Java API is excellent. It surpasses the masses of documentation found in Microsoft's MSDN in quality and beats documentation I have seen for any OpenSource project to date. It's comparable to UNIX man pages, but much more consistent and much better interlinked.
Java makes networking easy as pie. Networking between different platforms wasn't always too easy before Java, but it is very simple with Java. It even makes multi-threading easy, and platform independant (the programming is platform independant, but the running is platform dependant, unfortunately).
Java is an example of good object oriented design (generally). Almost all of Java's internal classes are very well defined and all follow a nice naming convention.
Java applets allow Java programs to be written and run in WebBrowsers. Unfortunately, after Java 1.1, Microsoft didn't quite agree with SunMicrosystems and stopped updating the version of that comes with InternetExplorer, the most common WebBrowser. Because of this, most applets you see on the internet today are limited to a very old version of Java and don't make use of all the new features in Java today (version 1.5.0 at the time of writing). Java is widely used for games in the Internet and Java for mobile phones grew in 2005 grew to a $350 billion dollar buisness on a world scale.
JavaBeans allow dynamic introspection of software components and streaming of state-full objects across the network without full knowledge.
But Java, like any ProgrammingLanguage, has cons. First, Java's Run-time Environment (JRE) is a big download and is needed for any user wishing to run a Java program. This JRE also incurs quite a large memory penalty, even running a simple application can take quite a large amount of memory. Also, despite the promise of "write-once, run anywhere", changes to the language API and differences in JRE versions results in problems for developers and users. See http://developers.slashdot.org/comments.pl?sid=94959&cid=8142663.
Java has a GraphicalUserInterface library; in fact it has two. Swing, a high level and well-designed API which is built upon AWT (Abstract Window Toolkit). These work well enough, but don't take the native LookAndFeel of a system (though they can attempt to emulate it), and can look quite ugly. They can also be quite unresponsive.
Java isn't fast. Now, I am not attempting to start a FlameWar. Java can actually perform very well, as fast as C code in many cases. However, especially for GUI's, Java doesn't come out too well. Even on a 650MHz computer, many Java interfaces programmed with the standard Java windowing toolkits will be slow and unresponsive. Case in point: Sun's own Forte. This is now called SunMicrosystems One Studio 4, but is a good case of an unresponsive system written in Java that seems to otherwise be very well designed and implemented.
Java also has limitations due to its ClassFile format.
The popular JREs start a new virtual machine for each Java program, rather than sharing one amongst all programs. This combined with the large memory overhead can make it impractical on machines more than a few years old. (AddToMe - is this still true these days?)
Sun's JRE (run-time environment) is not Free-software (although it is free as in $$, and the source code is available). The "other" widely used JRE for Linux distributions, blackdown, is based on Sun's code, so therefore isn't Free either. Neither Debian or RedHat or many of the other distributions will officially distribute non-Free software. The lack of a Free JRE (along with JRE size and speed issues) is probably one of the biggest obstacles to wide-spread adoption of Java on Linux. However, most of the issues mentioned above are implementation issues so could in theory be overcome. For example, the GCC project is part-way through a java compiler that would (of course) be licensed under the GPL. http://java.debian.net/index.php/MovingJavaToMain shows the progress on getting Free java programs (and runtimes) into Debian's main stable distribution.
lib/main.php:944: Notice: PageInfo: Cannot find action page