Skip to content
On this page

History

Java was first developed by James · Gosling (High Commander, known as the father of Java) of SUN Corporation (acquired by Oracle) in the early 90s of the last century, originally named Oak, with the goal of targeting embedded applications in small home appliances, but the market did not respond well.

Who would have thought that the rise of the Internet would bring Oak back to life, so SUN remodeled Oak and officially released it under the name Java in 1995, because Oak had already been registered, so SUN registered the trademark Java. With the rapid development of the Internet, Java has gradually become the most important network programming language.

Java is somewhere between a compiled language and an interpreted language. In compiled languages such as C and C++, the code is directly compiled into machine code for execution, but the instruction set of the CPU is different for different platforms (x86, ARM, etc.), so it is necessary to compile the corresponding machine code for each platform.

Interpreted languages such as Python and Ruby do not have this problem, and the interpreter can directly load the source code and run it, at the cost of running too inefficiently. Java, on the other hand, compiles code into a kind of "bytecode", which is similar to abstract CPU instructions, and then writes virtual machines for different platforms, and the virtual machines of different platforms are responsible for loading and executing bytecode, so as to achieve the effect of "write once, run everywhere". Of course, this is for Java developers.

For virtual machines, they need to be developed separately for each platform. In order to ensure that virtual machines developed by different platforms and companies can correctly execute Java bytecode, SUN has developed a series of Java virtual machine specifications. From a practical point of view, the JVM compatibility is very good, and the lower version of Java bytecode works perfectly fine on the older version of the JVM.

With the development of Java, SUN has divided Java into three different versions:

  • Java SE:Standard Edition
  • Java EE:Enterprise Edition
  • Java ME:Micro Edition

What is the relationship between these three?

  • Java SE is the standard edition, including the standard JVM and standard library
  • Java EE is the enterprise edition, which only adds a large number of APIs and libraries on the basis of Java SE to facilitate the development of web applications, databases, message services, etc., and the virtual machine used by Java EE applications is exactly the same as Java SE.
  • Java ME is a "thin version" for embedded devices, and the standard libraries of Java SE are not available on Java ME, and the virtual machine of Java ME is also a "thin version".

There is no doubt that Java SE is at the heart of the entire Java platform, and Java EE is necessary for further learning web applications. Frameworks such as Spring, which we are familiar with, are part of the Java EE open source ecosystem. Unfortunately, Java ME never really caught on, but instead Android development became one of the standards for mobile platforms, so learning Java ME is not recommended without special needs.

Roadmap

Therefore, we recommend the following Java learning roadmaps:

  1. First of all, you need to learn Java SE, master the Java language itself, Java core development technology, and the use of Java standard libraries.
  2. If you continue to learn Java EE, then you need to learn the Spring framework, database development, and distributed architecture.
  3. If you want to learn big data development, then big data platforms such as Hadoop, Spark, and Flink need to be learned, and they are all developed based on Java or Scala.
  4. If you want to learn mobile development, then you need to dive deep into the Android platform and master Android app development. Whatever you choose, the core technology of Java SE is the foundation, and the purpose of this tutorial is to make you fully proficient in Java SE and master Java EE!

Java version

Since the release of version 1.0 in 1996, the latest Java version so far is Java 21:

TimeVersionTimeVersion
19961.019971.1
19981.220001.3
20021.420041.5 / 5.0
20051.6 / 6.020111.7 / 7.0
20141.8 / 8.02017/91.9 / 9.0
2018/3102018/911
2019/3122019/913
2020/3142020/915
2021/3162021/917
2022/3182022/919
2023/3202023/921
2024/3222024/923

The version of Java used in this tutorial is the latest version of Java 23.

Explanation of terms

Beginners learning Java often hear terms such as JDK and JRE, but what are they?

  • JDK:Java Development Kit
  • JRE:Java Runtime Environment

Simply put, a JRE is a virtual machine that runs Java bytecode. However, if you only have Java source code, you need a JDK to compile it into Java bytecode, because in addition to the JRE, the JDK also provides development tools such as compilers and debuggers.

To learn Java development, of course, you need to install the JDK.

What about JSR, JCP...... What's it again?

  • JSR:Java Specification Request
  • JCP Organization: Java Community Process\

In order to ensure the standardization of the Java language, SUN has made a JSR specification, where you want to add a function to the Java platform, such as the function of accessing the database, you must first create a JSR specification and define the interface, so that each database vendor writes Java drivers in accordance with the specification, and developers do not have to worry about the database code they write can run on MySQL, but not on PostgreSQL.

So JSR is a series of specifications, from the memory model of the JVM to the web program interface. The JCP is the organization responsible for auditing the JSR.

When a JSR specification is released, a "reference implementation" and a "compatibility test suite" are also released for everyone to have a reference:

  • RI:Reference Implementation
  • TCK:Technology Compatibility Kit

For example, someone proposes to build a message server based on Java, which is a good proposal, but it is not enough to have a proposal, you have to post the code that can really run, which is RI. If someone else wants to develop such a message server, how can we ensure that the interface and functions of these message servers are the same for developers? So TCK has to be provided.

Generally speaking, RI is just a "run" correct code, it does not pursue speed, so if you really want to choose a Java message server, generally no one uses RI, everyone will choose a competitive commercial or open source product.

History has loaded