Different Java Versions and Their Purposes

javajava-eejavafx

I am just about to start my Java journey, ( I've already dabbled in C++) but I am getting really confused about all the different versions of Java:

  • JavaSE
  • JavaEE
  • JavaFX
  • etc.

Can someone explain these in detail?

Best Answer

Java Proper

Java Standard Edition is the "normal" version designed for general computing. It, like all other variants of Java, is a strongly, statically typed, bytecode-compiled, Object-Oriented language run on a virtual machine with fully automatic garbage collection. It has most of the features of the language. Examples of applications would be applications like Minecraft or ArgoUML. It can be run as a stand-alone desktop application or an embedded application on a web page as an Applet.

Java Enterprise Edition is not a different language but are Interface specifications designed to produce software that runs inside an Application Server implementation. The main difference here is that it is designed for deployment to Application Servers that conform to the Enterprise Edition Interface specifications; Java SE can be used to write stand-alone servers but doesn't include standardized Interfaces and specifications purpose-built to in the way Java EE is. Examples would be applications designed to run on Glassfish ( Java EE reference implementation ), JBoss, etc.

Java Micro Edition is Java designed to run on Mobile devices. It should be noted that this is not the same thing as Android. Java ME is designed to deal with mobile hardware better than Java SE. I use a Pantech Ease as a mobile phone, it runs Java ME.

Java Card is even "smaller" aimed at really low-end devices like Smart ATM cards. Yes, some of them actually have Java on them.

JavaFX is a framework designed to build Rich Internet Client GUI Applications.

JVM language Family

First, the JVM. This is a stack-based virtual machine running compiled bytecode which looks a lot like assembly language. Optimization can make it run quite fast for very specialized situations.

That's it for the actual Oracle Java Stuff, now for the stuff people commonly use on the JVM. All of these languages feature Java interop and can typically call most or all of the Java libraries.

Groovy is an Object-Oriented, dynamically typed language with a more succinct syntax that is billed as an easier, more powerful alternative to Java. It was designed as a kind of extension language to Java, allowing nearly drag and drop of Java files into Groovy programs. It has a framework commonly associated with it for web development known as Grails.

Scala is a fairly recent (2003) hybrid object-oriented/functional language that is designed to be highly scalable, hence the name. Twitter is a heavy user of Scala.

Clojure is a recent (2007) functional language of the Lisp family. It's designed for heavy concurrent programming from the outset. I don't have a good software example for this one but there are a number of companies using it.

Jython and JRuby are the Java bytecode versions of Python and Ruby respectively.

There are a number of other languages for the JVM out there like Jaskell (Haskell for the JVM) but they tend to be obscure/academic experiments.

Related Stuff

Android uses Java but runs on the Dalvik register-based machine. Dalvik is currently the object of a lawsuit against Google, its adopter. Android is essentially Java SE with a different set of Libraries.

Netbeans and Eclipse are the two most widely talked about Java IDEs. Asking questions about one vs the other will invoke closure and I don't mean the programming concept.

Unrelated Stuff

Javascript is not Java...at all. It was named that to take advantage of Java's popularity and the confusion has been annoying ever since.

The Rhino in the Room

Rhino is a Javascript interpreter that turns Javascript Code into Java code that can then be run somewhere. It's not a separate language "per se" but like anything else has its own set of quirks. Rhino is developed by Mozilla as an alternative to their C-based SpiderMonkey interpreter. Rhino is typically used to embed Javascript within a Java program.

Nashorn, developed by Oracle (possibly with German levels of efficiency) for the JDK 8, appears to be the new standard for embedded Javascript within Java. This would mean that Rhino is no longer used for the main implementation of Java. What this means for the Rhino project is unclear at this time.

Related Topic