27

How to know JDK version from within Java code

0

4 Answers 4

50

I presume you mean just the Java version, in which case try this:

String version = System.getProperty("java.version");
Sign up to request clarification or add additional context in comments.

Comments

8

Since java 9

System.out.println(Runtime.version());

Prints something like 17.0.2+8-86

or if you need more

System.out.println("Java Feature Version = " + Runtime.version().feature());
System.out.println("Java Interim Version = " + Runtime.version().interim());
System.out.println("Java Update Version = " + Runtime.version().update());
System.out.println("Java Version Build = " + Runtime.version().build().map(String::valueOf).orElse("Unknown"));
System.out.println("Java Version Pre-Release Info = " + Runtime.version().pre().orElse("N/A"));

Prints

Java Feature Version = 17
Java Interim Version = 0
Java Update Version = 2
Java Version Build = 8
Java Version Pre-Release Info = N/A

Comments

4

Relying on the java.version string for anything else than showing to a human is fragile and will break if running on another Java implementation.

The only reliable way programatically is to use reflection to carefully ask if a given facility is available, and then select the appropriate code accordingly.

13 Comments

Can you give an example of when this would fail?
@Jesse, I'd rather put it the other way around. What rule would you set up for analyzing the java.version string?
@Jesse, I was unaware of this property. I can, however, not see from a quick look in the JLS that it is guaranteed to be present and containing a valid number. Perhaps you know where it says so?
@Jesse, the crucial question here if this is for Hotspot-based JVM's only. I cannot immediately tell.
Don't use Float.valueOf like @JesseBarnum. This failed for me because 1.8>=1.8 returned false for me, due to round-off errors. Use .compareTo("1.8")>=0 instead.
|
0

If you need to know the bit version(32bit or 64 bit) as well, and you are running a hotSpot JVM, you can try this code:

System.getProperty("sun.arch.data.model")

No grantee that it will work for other Java implementaions rather than hotSpot.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.