Factsheet
Videos
“Java SE” is three things:
- An abbreviation of “Java Standard Edition”
- A trademark owned by Oracle Corp.
- A set of specifications published by Oracle Corp.
Anybody in the world is free to write software that implements the Java SE specifications. In the past, several companies have done so.
However, anybody in the world is not free to use the trademark of Java. To use that trademark, a person or company is required to come to terms with Oracle in a licensing deal. Presumably that deal would require payment.
Long story short, and over-simplified for brevity… Some of the companies that previously wrote their own implementations of Java SE decided to join forces, combine their codebases, and publish the whole thing as open-source. These companies included Oracle, IBM, and Apple. Thus was born the OpenJDK project (Wikipedia). Since then, other companies and individuals have joined the project.
The OpenJDK name is a trademark owned by Oracle. However, Oracle has published permission allowing others to use the term with no payment required.
The OpenJDK project published source code to an implementation of the Java SE specifications. The project does not publish built binaries or installers.
Several vendors do publish built binaries or installers for implementations of the Java SE specs. Nearly all of these implementations rely largely, if not entirely, in the OpenJDK source code.
These binaries/installers vendors include, in no particular order:
- Azul Systems
- SAP
- Amazon
- Microsoft
- IBM
- Red Hat
- Oracle
- Adoptium
- BellSoft
… and more.
Most of those built binary or installers products use OpenJDK in their name or in their descriptions, as allowed by Oracle. A few of those products may use the term Java or Java SE with explicit permission from Oracle.
There are other editions of Java technology:
- Java Card (for smart cards, badges, etc.)
- Java ME, or Micro Edition (for constrained devices)
- Java EE, or Enterprise Edition (a wide collection of specifications that run on top of an implementation of the Java SE specs, aimed at developers making software for enterprise oriented users)
The first two, Java Card & Java ME are owned by Oracle. The third, Java EE, was donated by Oracle Corp to the Eclipse Foundation were it is now known as Jakarta EE. Jakarta EE is a collection of specifications, with various vendors publishing implementations.
The term “JDK” refers to Java Development Kit. This kit includes an implementation of the Java SE specs, plus tools to write Java apps. These tools include a compiler.
The term “JRE” refers to Java Runtime Environment. This is a JDK minus some of the software development tools.
The term “JVM” refers to Java Virtual Machine. A JVM is a piece of software that enables a Java-based app to execute at runtime on a particular kind of host computer and operating system. Java apps are platform-agnostic, in other words, are not “native”. So a Java app needs a particular JVM to know how to run on a Mac, on a PC, or on a mainframe.
Every JDK and every JRE contains a JVM.
1 . Yes, you can think of Java SE same as JDK. Java SE is the 'base' platform that defines the Java language specification (JLS), the Java Virtual Machine Specification (JVMS), Standard library APIs, byte-code format, compilation tools, and the class loader.
Now, this is all concepts and specifications and community proposals (via JCP) until implemented into a set of software tools. The set of software and tools that implements all of the above is called JDK.
JDK is essentially a Software Development Kit (SDK). They simply decided to name it JDK.
2 . Yes, Java SE is basically a set of specs. An implementation must follow the spec and get it reviewed & approved by Oracle before they can call their implementation Java.
In the case of Java EE the specifications deal with libraries & APIs most of the time. In case of Java SE the specs also care about language and VM details. You take Java SE (the standard JDK) + add some libraries and now you have Java EE. Oracle refers to this as Java EE SDK though.
3 . Unless your life depends on it. Just understand the relationship between Java SE, Java EE, JDK, SDK, and you are good. Just connect the dots and be done with it.
Okay, context. I'm trying out some programming languages to perhaps get into (after previously primarily doing stuff with C#). One of these is Java. I had a 2019 version of Eclipse installed from last time I wanted to learn Java. Updated it to 2021, and it tells me I need Java 11 or higher.
So I google "download Java". Oracle offers me to download Java 8 Update 291, released April 2021. I check my instaleld version. Sure enough, I have Java 8 Update 291. If I am up to date, why is Eclipse complaining, I wonder? So I google Java 11. Huh, what's that, there are versions of Java up to 16? One article mentions that Java 8 has been deprecated for years. Odd, I think, didn't Oracle tell me just now that Java 8 was released in 2021? Oh, I see, they are talking about something called "Java SE". So I google what that is. "java vs java se", I google, but all I get are articles about how Java SE is different from something called Java EE. Never heard of it, I don't want it. In the meantime, I have also googled for JDK, since I assume that I need the Java SDK to get the compilers. Maybe the JDK has a different version number than the JRE, I theoretise. But then what is this Java SE? At one point, it says it's the standard edition, but on the next page, it says it's "for reference purposes only". Whatever that means. Can I use it to run and compile Java or not, I ask.
tldr: why is there a Java 16 if Oracle tells me 8 is the latest, which one do I want to run and program with the latest Eclipse?
P.S. necessary context is perhaps that I'm on 64-bit Windows 7 (my Eclipse install on my Linux laptop works fine)
I know I can google it but the results are very complex, im just learning Java and I just looked at the job market and i found a job who wanted u to know Java, Java EE , Java SW and Java SE. Can someone explain it simply ?
Java standard edition (SE) is mainly used to build desktop applications. This has all the basic libraries and packages from simple type wrapper classes to GUI, networking, etc.
Java enterprise edition (EE) is used for developing web applications and scalable server applications.
https://docs.oracle.com/javaee/6/firstcup/doc/gkhoy.html
Here is a fairly simple explanation while everyone else sits waiting.
Yes, it can be confusing.
You didn't ask for it, but I'll start from here. The JVM is the Java Virtual Machine. It is a program that can read compiled Java code (the .class files, and the .jar files that are simply .zip files containing a bunch of .class files packaged together) and execute it. There are many JVMs, for example you need a JVM for Windows, one for Linux, one for OSX etc. but there are also many alternative JVMs, JVMs for embedded device etc. (many will disagree and say that the JVM is only one, and it's a specification. However, commonly a sysadmin will say "the JVM" to indicate the actual binary running on the server).
You didn't ask for the following either. The JRE is the Java Runtime Environment. It includes everything needed to run a Java application, that is the JVM itself, the standard library and a bunch of other files. The standard library is itself very important, because it contains a lot of useful things you'll use when developing Java applications. It contains all the stuff in java.* packages and some private stuff in com.sun, com.oracle packages.
Different versions of Java (1.0, 1.1, etc. all the way to 1.7, also known as Java 7) usually contain improvements to both the JVM and the standard library, so the two usually need to run together, and are packaged together in the JRE.
If you are running any Java program on your computer, you have a JRE installed.
The JDK is the Java Development Kit. It contains the JRE as well as a lot of other useful stuff for developing Java applications. That includes the compiler obviously (which is also contained in the JRE for some good reason, but you can ignore this fact now), the JAR utility to create .jar files, many tools for "decompiling" class files, inspect .jar files, repackage them, etc.
It also usually contains documentation for the standard library and also all the sources of the standard library, because they are useful for developers to read and inspect. If you want to seriously develop Java applications, you need the JDK.
When talking about JavaSE, JavaEE, JavaME etc. those are so called "editions". Basically, since the Java ecosystem is huge, Sun decided to offer Java in different editions:
- JavaSE: is the standard edition, it is usually a good fit for client side software, normal applications, etc.
- JavaME: is the mobile edition, it is what small games on old phones was made with, but it's basically a "smaller" version of Java suitable for very low capacity processors.
- JavaEE: is the "enterprise edition". It is used to develop server side stuff, so it includes a lot of libraries used on server side.
Regarding numbering, they messed it up quite a bit. Actually, after Java 1.4 they created the JCP, to involve the community in the development of Java itself, and starting from Java 1.5 it is officially named "Java 5", despite most in the industry calling it 1.5. Also, Java 1.2 was Java 2, but everyone I know who was not working in Sun at that time always called it 1.2.
Is Java 7 just Java SE 7? and Java 6 is Java SE 6?
Yes.
There are a couple of Java "editions", namely Java SE, the "Standard Edition", Java EE, the "Enterprise Edition" and Java ME, the "micro edition".
"Java N" where N is some number refers to the SE. There are separate edition numbers for Java EE which is up to version 6 now. Java ME has its own versions as well - it is currently at version 3. Java ME is intended for mobile and small devices.
Java EE is a set of libraries and interfaces, such as EJB, JMS, JNDI, Servlets/JSPs that are built on top of the Java SE.
Is Java SE 7 also Java JDK 7? and also what is the JDK?
JDK = Java Development Kit. When you download Java you can either get the JRE (Java Runtime Environment) which only lets you run already compiled Java applications or you can get the JDK which allows you to compile and run Java apps. Java SE 7 refers to both the JDK and the JRE.
Does this mean that the java JDK is the same as the java number (Java SE 7)?
Yes.
what is java 1.5 and 1.6? and how does that correspond to the java number (Java SE...)?
Sun's numbering for Java changed midstream and is a bit confusing. They went from 1.0 to 1.1 then 1.2. Then they decided to call 1.2 "Java 2" and that label lasted until Java 1.4. Then Java 5 was called both 1.5 and 5.0 and that has continued - Java 7 is also Java 1.7, Java 6 is also Java 1.6, etc.
Is Java's SDK the same as the JDK?
Yes.