Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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?

share|improve this question
add comment

1 Answer

up vote 82 down vote accepted

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 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 Server that conform to the Enterprise Edition Interfaces, 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.

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 mostly 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.

share|improve this answer
    
Thanks a lot! That's what I was looking for :) One more question: J2SE, J2EE etc. these are just newer versions of SE, EE, etc ? –  Patryk Oct 23 '11 at 3:49
6  
Yes, J2EE and J2SE are versions two of the Java Enterprise Edition respectively standard edition. This naming scheme is no longer followed though. Current versions are referred to as Java SE 6 (or 5/7) and Java EE 5 (or 6). –  BenR Oct 23 '11 at 6:59
    
There's a Java for smart cards? The mind boggles. –  Samuel Walker Oct 25 '11 at 11:46
    
One answer to rule them all! –  user Feb 22 '12 at 2:14
1  
Since JDK8, Rhino is deprecated(removed?). Nashorn is the new Rhino. –  Silviu Burcea Mar 10 at 9:18
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.