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:
Can someone explain these in detail?
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 in 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 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 Pantec Ease as a mobile phone, it runs Java ME.
Java Card is even "smaller" aimed as 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 bytcode 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 interops 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.
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.
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.
The Rhino in the Room