Questions tagged [java]

Java is a high-level object-oriented programming language. Use this tag when you're having problems using or understanding the language itself. This tag is frequently used alongside other tags for libraries and/or frameworks used by Java developers.

Java is a high-level, platform-independent, object-oriented, functional programming language and runtime environment.

The Java language derives much of its syntax from C and C++, but its object model is simpler than that of the latter and it has fewer low-level facilities. Java applications are typically compiled to bytecode (called class files) that can be executed by a JVM (Java Virtual Machine), independent of computer architecture. The JVM often further compiles code to native machine code to optimize performance.

The JVM manages memory with the help of a garbage collector (see also garbage-collection) to handle object removal from memory when objects are no longer in use. This means the programmer doesn't have to manually remove objects from memory, unlike in languages such as C. Java's typing discipline is static, strong, safe, nominative, and manifest. Java supports features such as reflection, interfacing with C and C++ via the JNI (Java Native Interface), and running scripting languages such as JavaScript.

Java is designed to have as few implementation dependencies as possible, intended to allow application developers to write once, run anywhere, or sometimes write once, run everywhere (code that executes on one platform does not need to be recompiled to run on another). Java was originally developed by James Gosling at Sun Microsystems (which fully merged with Oracle Corporation on January 27th, 2010) and was released in 1995 as a core component of Sun Microsystems' Java platform. Java was started as a project called "Oak" by James Gosling in June 1991.

The Java platform is the name given by Sun (now Oracle) to computing systems that have installed tools for developing and running Java programs. The platform features a wide variety of tools that can help developers work efficiently with the Java programming language.

To get started, you download a Java Development Kit (JDK), which lets you both develop and run java applications.

Background

The main reference implementation of Java is open source (the OpenJDK) and is supported by major companies including Oracle, Apple, Microsoft, SAP, and IBM.

Java is compiled into bytecode, which is then compiled by the JVM into native machine code. The compilation is done just-in-time (JIT). This was initially viewed as a performance hit, but JVM and JIT compilation improvements have made this less of a concern. In some cases, the JVM may even be faster than native code compiled to target an older version of a processor for backward compatibility reasons. Since Java 9, it can be compiled ahead-of-time (AOT).

Very few computers can run Java programs directly. Before Java 9, users running Java programs were expected to have the JRE (Java Runtime Environment) installed on their system. Modern Java programs intended to run directly on client computers now ship with their own installers.

Versions

Notable Java versions, code names, and release dates include:

Version Code Name Release Date
Java SE 20 JSR 395 March 21, 2023
Java SE 19 JSR 394 September 20, 2022
Java SE 18 JSR 393 March 22, 2022
Java SE 17 JSR 392 September 14, 2021
Java SE 16 JSR 391 March 16, 2021
Java SE 15 JSR 390 September 15, 2020
Java SE 14 JSR 389 March 17, 2020
Java SE 13 JSR 388 September 17, 2019
Java SE 12 JSR 386 March 19, 2019
Java SE 11 JSR 384 September 25, 2018
Java SE 10 JSR 383 March 20, 2018
Java SE 9 JSR 376 September 21, 2017
Java SE 8 (1.8) JSR 337 March 18, 2014
Java SE 7 (1.7) Dolphin July 28, 2011
Java SE 6 (1.6) Mustang December 11, 2006
J2SE 5.0 (1.5) Tiger September 29, 2004
J2SE 1.4 Merlin February 13, 2002
J2SE 1.3 Kestrel May 8, 2000
J2SE 1.2 Playground December 4, 1998
JDK 1.1 February 19, 1997
JDK 1.0 January 23, 1996
JDK Beta 1995

Since Java SE 10, new versions will be released every six months.

Latest Stable Versions:

Version Release Date
Java Standard Edition 20 (20.0.2) July 18, 2023
Java Standard Edition 19 (19.0.2) January 17, 2023
Java Standard Edition 18 (18.0.2.1) August 18, 2022
Java Standard Edition 17 (17.0.8) July 18, 2023
Java Standard Edition 16 (16.0.2) July 20, 2021
Java Standard Edition 15 (15.0.2) January 19, 2021
Java Standard Edition 14 (14.0.2) July 14, 2020
Java Standard Edition 13 (13.0.2) January 14, 2020
Java Standard Edition 12 (12.0.2) July 16, 2019
Java Standard Edition 11 (11.0.20) July 18, 2023
Java Standard Edition 10 (10.0.2) July 17, 2018
Java Standard Edition 9 (9.0.4) January 16, 2018
Java Standard Edition 8 Update 381 (1.8.0_381) July 18, 2023
Java Standard Edition 7 Update 80 (1.7.0_80) April 14, 2015

For more code names and release dates, visit Java SE Code Names. To see release notes for each version of the JDK, visit the Wikipedia article on Java version history.

To get a Java JDK so you can develop (or run) java code on your machine, you need a java installer package supplier. Java is open source, but a supplier will take care of building the java source code into a binary, wrapping this into an installer, and maintaining this version on your machine (e.g. with security updates).

Java comes in LTS (Long-Term-Support) and non-LTS versions. Each supplier chooses how to deal with LTS versions. Some (Oracle OpenJDK) have the same short support window for all releases, LTS or not. Some (Amazon Corretto) do not bother to release non-LTS versions at all. Most suppliers release all versions that will support LTS versions for far longer.

The LTS versions are Java 8, 11, and 17.

The major suppliers are:

  • AdoptOpenJDK, also known as Adoptium - free, LTS versions and non-LTS versions, LTS versions are supported a long time. Recommended.
  • Oracle OpenJDK - Note that these are only supported for 6 months, even the so-called LTS (Long Term Support) releases. You will need to update as java updates.
  • Oracle JavaSE - licensed for those who want commercial support. LTS and non-LTS versions, LTS versions are supported for a long time. A free but license-wise very restricted test version is available.
  • Amazon Coretto - free, maintained by Amazon, optimized for AWS, LTS versions only.
  • Many more commercial offerings.

The End of Public Updates (Formerly called End Of Life and also referred to as EoPU) dates for the freely available distribution from Oracle are:

Version EoPU Date
Java SE 16 September 2021 for OpenJDK
Java SE 15 March 2021 for OpenJDK
Java SE 14 September 2020 for OpenJDK
Java SE 13 March 2020 for OpenJDK
Java SE 12 September 2019 for OpenJDK
Java SE 11 At least September 2022 for AdoptOpenJDK
Java SE 10 September 2018
Java SE 9 March 2018
Java SE 8 January 2019 (commercial use)
Java SE 7 Apr 2015
Java SE 6 Feb 2013
J2SE 5.0 Oct 2009
J2SE 1.4 Oct 2008

Initial help

New to Java or need help to get your first Java program running? See the Oracle Java Tutorials section on Getting Started.

Before asking a question, please search to see if it has been asked before (we have many duplicates, some are listed below under Frequently Asked Questions), and read Writing the Perfect Question to learn how to get Jon Skeet to answer your question.

Naming conventions

Java programs should adhere to the following naming conventions to increase readability and decrease the chances of accidental errors. By following these naming conventions, you will make it easier for others to understand your code and help you.

  • Type names (classes, interfaces, enums, etc.) should begin with a capital letter and capitalize the first letter of each subsequent word. Examples include: String, ThreadLocal, and NullPointerException. This is sometimes known as PascalCase.
  • Method and field names should be camelCased; that is, they should begin with a lowercase letter and capitalize the first letter of each subsequent word. Examples: indexOf, printStackTrace, interrupt.
  • Constant expression names (static final immutable objects) should be written in ALL_CAPS_SNAKE_CASE, with underscores separating each word. Examples: YELLOW, DO_NOTHING_ON_CLOSE. This also applies to the values of an Enum class. However, static final references to non-immutable objects should be camelCased.

Hello World - Your first program

Code of a typical Hello World program:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Compilation and invocation of Hello World program:

javac -d . HelloWorld.java
java -cp . HelloWorld

Java source code is compiled to an intermediate form (bytecode instructions for the Java Virtual Machine) which can be executed with the java command later on.

More information:

Useful IDEs for Java

Beginners' resources

Online Compilers

Day-to-day updated resources

Advanced resources

Java frameworks, libraries, and software

Java programming books and resources

Frequently Asked Questions

People often ask about the following Java topics:

General:

Classpath:

String, StringBuilder and toString:

equals and hashCode:

Java Platform SE API:

Generics:

Classes and objects:

Arithmetic and conversions:

Debugging:

Thread and multithreading:

Interacting with the operating system:

(Editors, please only list questions which actually are frequently asked.)

Chatrooms

1906089 questions
227
votes
9 answers

How do I hide .class files from the Open Resource dialog in Eclipse?

I won't want to have edit any working sets. I just want a way to, across all workspaces and projects, prevent .class files from ever showing in the Open Resource Dialog. Is there a way to do this?
bergyman
  • 4,480
  • 3
  • 23
  • 32
227
votes
3 answers

Is there a Newline constant defined in Java like Environment.Newline in C#?

In C# there is the static property Environment.Newline that changed depending on the running platform. Is there anything similar in Java?
orj
  • 13,234
  • 14
  • 63
  • 73
227
votes
22 answers

Add context path to Spring Boot application

I am trying to set a Spring Boot applications context root programmatically. The reason for the context root is we want the app to be accessed from localhost:port/{app_name} and have all the controller paths append to it. Here is the application…
CorreyS
  • 2,433
  • 3
  • 15
  • 16
227
votes
10 answers

Installing Java 7 on Ubuntu

Note: This question was asked before Oracle made the OpenJDK the free version of the Oracle JDK, and the historic answers reflect that. As of 2022 you should not use Java 7 unless you must for projects which cannot run on OpenJDK 8. To install…
foralobo
  • 3,947
  • 5
  • 18
  • 17
227
votes
17 answers

How to use Java property files?

I have a list of key/value pairs of configuration values I want to store as Java property files, and later load and iterate through. Questions: Do I need to store the file in the same package as the class which will load them, or is there any…
Ali
  • 261,656
  • 265
  • 575
  • 769
226
votes
19 answers

How to convert milliseconds to "hh:mm:ss" format?

I'm confused. After stumbling upon this thread, I tried to figure out how to format a countdown timer that had the format hh:mm:ss. Here's my attempt - //hh:mm:ss String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), …
mre
  • 43,520
  • 33
  • 120
  • 170
226
votes
10 answers

java.lang.NoClassDefFoundError: Could not initialize class XXX

public class PropHolder { public static Properties prop; static { //code for loading properties from file } } // Referencing the class somewhere else: Properties prop = PropHolder.prop; class PropHolder is a class of my own. The class…
Leon
  • 8,151
  • 11
  • 45
  • 51
226
votes
10 answers

Spring MVC - How to get all request params in a map in Spring controller?

Sample URL: ../search/?attr1=value1&attr2=value2&attr4=value4 I do not know the names of attr1, att2, and attr4. I would like to be able to do something like that (or similar, don't care, just as long as I have access to the Map of request param…
MDb
  • 2,261
  • 2
  • 14
  • 3
226
votes
12 answers

HTTP POST using JSON in Java

I would like to make a simple HTTP POST using JSON in Java. Let's say the URL is www.site.com and it takes in the value {"name":"myname","age":"20"} labeled as 'details' for example. How would I go about creating the syntax for the POST? I also…
asdf007
  • 2,269
  • 2
  • 14
  • 3
226
votes
9 answers

How can I set the JDK NetBeans runs on?

I have the older NetBeans 6.7, NetBeans 6.9, and NetBeans 7.0, which used to run on jdk1.6.0_21 and jdk1.6.0_25. Now I've removed those JDKs and only have jdk1.6.0_26 and jdk1.7.0 left, but I still want to keep the older versions of NetBeans, but…
Frank
  • 30,590
  • 58
  • 161
  • 244
226
votes
29 answers

Gradle: Could not determine java version from '11.0.2'

I ran the following comment: ./gradlew app:installDebug only to be met with the log: FAILURE: Build failed with an exception. * What went wrong: Could not determine java version from '11.0.2'. * Try: Run with --stacktrace option to get the stack…
lesley2958
  • 2,538
  • 4
  • 15
  • 15
226
votes
6 answers

make arrayList.toArray() return more specific types

So, normally ArrayList.toArray() would return a type of Object[]....but supposed it's an Arraylist of object Custom, how do I make toArray() to return a type of Custom[] rather than Object[]?
kamikaze_pilot
  • 14,304
  • 35
  • 111
  • 171
226
votes
17 answers

Java 8 LocalDate Jackson format

For java.util.Date when I do @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy") private Date dateOfBirth; then in JSON request when I send { {"dateOfBirth":"01/01/2000"} } it works. How should I do this for Java 8's…
JAB
  • 3,546
  • 9
  • 36
  • 39
226
votes
14 answers

How to persist a property of type List in JPA?

What is the smartest way to get an entity with a field of type List persisted? Command.java package persistlistofstring; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.Basic; import…
Andrea Francia
  • 9,737
  • 16
  • 56
  • 70
226
votes
14 answers

Difference between File.separator and slash in paths

What is the difference between using File.separator and a normal / in a Java Path-String? In contrast to double backslash \\ platform independence seems not to be the reason, since both versions work under Windows and Unix. public class SlashTest { …
Joe23
  • 5,683
  • 3
  • 25
  • 23
1 2 3
99
100