{"id":58875,"date":"2023-10-01T09:04:03","date_gmt":"2023-10-01T03:34:03","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=58875"},"modified":"2023-10-06T09:08:17","modified_gmt":"2023-10-06T03:38:17","slug":"exploring-java-9-to-17-features","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/exploring-java-9-to-17-features\/","title":{"rendered":"Exploring Java 9 to 17 Features"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Java is a programming language that has been around for a long time and is renowned for its adaptability and durability. In recent years, Java has experienced a significant expansion and evolution, culminating in the release of Java 8. This blog will provide a brief overview of these versions, emphasizing key features and enhancements. This blog will provide an overview of the journey from Java 8 through to Java 17.<\/span><\/p>\n<p><b>JShell (Java REPL):\u00a0 \u00a0<\/b><span style=\"font-weight: 400;\">A Read-Eval-Print Loop (REPL) for Java called JShell was introduced in Java 9. Instead of creating full-fledged classes and compiling them, this interactive tool enables developers to run Java code fragments. Creating whole Java classes and compiling them was necessary in order to test short code fragments prior to Java 9. This procedure is streamlined using JShell.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58853 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/jshell-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/jshell-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/jshell-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/jshell-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/jshell-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Private Methods in Interfaces:\u00a0 <\/b><span style=\"font-weight: 400;\">Interfaces couldn&#8217;t have private methods in previous versions of Java. Java 9 fixed this issue by enabling interfaces to include private methods, which may be utilized for internal code reuse.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58858 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/PrivateInterfcaes-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/PrivateInterfcaes-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/PrivateInterfcaes-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/PrivateInterfcaes-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/PrivateInterfcaes-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Stream API Improvements:\u00a0 <\/b><span style=\"font-weight: 400;\">The Stream API was strengthened and improved with a number of changes in Java 9. The takeWhile and dropWhile methods are an important feature since they let you take or drop components from a stream depending on a predefined condition.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><span style=\"text-decoration: underline;\">takeWhile method:<\/span> allows you to take elements from a stream as long as a specified condition is met.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><span style=\"text-decoration: underline;\">dropWhile method<\/span>: allows you skip elements until the specified condition becomes false.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58859 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/StreamApiImp-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/StreamApiImp-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StreamApiImp-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StreamApiImp-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StreamApiImp-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Modules<\/b><span style=\"font-weight: 400;\">:\u00a0 <\/span><span style=\"font-weight: 400;\">Before Java 9, \u200b\u200bJava applications were organized into packages, but there was no formal way to define module boundaries and dependencies.\u00a0 <\/span><span style=\"font-weight: 400;\">Java 9 improvements: Introducing a module system that allows developers to create modular applications. A module encapsulates a package and allows you to specify its dependencies.\u00a0 <\/span><span style=\"font-weight: 400;\">Refer:\u00a0 <\/span><a href=\"https:\/\/howtodoinjava.com\/java9\/java-9-modules-tutorial\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><\/p>\n<p><b>Factory Methods:\u00a0 <\/b><span style=\"font-weight: 400;\">A collection factory method in Java is a static method that provides a simple way of initializing an immutable Collection&lt;E&gt;. Being immutable, no elements can be added to, removed from, or modified inside the Collection&lt;E&gt; after it is initialized.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58860 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/FactoryMethods-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/FactoryMethods-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/FactoryMethods-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/FactoryMethods-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/FactoryMethods-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Try With Resources Improvements:\u00a0 <\/b><span style=\"font-weight: 400;\">Java 9 improvements: Java 9 allows you to declare and initialize resources directly in the try-with-resources statement, reducing code redundancy. Comparison with previous versions:\u00a0<\/span><span style=\"font-weight: 400;\">In previous versions of Java, you had to declare and initialize resources outside of the try block, which made your code more verbose.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58857 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TryWithResourcesImprovements.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TryWithResourcesImprovements.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TryWithResourcesImprovements-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TryWithResourcesImprovements-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TryWithResourcesImprovements-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>VAR Keyword:\u00a0 <\/b><span style=\"font-weight: 400;\">Java 10 introduced the var keyword for local variable type inference. Now, declaring variables becomes more concise.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58861 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/VAR-Keyword-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/VAR-Keyword-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/VAR-Keyword-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/VAR-Keyword-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/VAR-Keyword-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Epsilon Garbage Collector:\u00a0 <\/b><span style=\"font-weight: 400;\">Java 11 came out with a new garbage collector called Epsilon, which is just for testing performance. You can turn it on with the command line using <\/span><b><i>-XX:+UseEpsilonGC.\u00a0<\/i><\/b><\/p>\n<p><b>Local-Variable Syntax for Lambda Parameters:\u00a0 <\/b><span style=\"font-weight: 400;\">You can make use of var for lambda arguments in Java 11.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58862 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Local-VariableSyntaxforLambdaParameters.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Local-VariableSyntaxforLambdaParameters.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Local-VariableSyntaxforLambdaParameters-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Local-VariableSyntaxforLambdaParameters-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Local-VariableSyntaxforLambdaParameters-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>HTTP Client:\u00a0 <\/b><span style=\"font-weight: 400;\">The HTTP client was first introduced in Java 9, but it became a part of Java 11.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58864 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/HTTPClient-1-1.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/HTTPClient-1-1.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/HTTPClient-1-1-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/HTTPClient-1-1-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/HTTPClient-1-1-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>String Methods:\u00a0 <\/b><span style=\"font-weight: 400;\">Java 11 added a bunch of new methods to the String class, like &#8220;isBlank&#8221;, &#8220;strip&#8221;, &#8220;stripLeading&#8221;, and &#8220;stripTrailing&#8221;, which make it a lot easier to do all the stuff you usually do with strings.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58865 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/StringMethods.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/StringMethods.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StringMethods-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StringMethods-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/StringMethods-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Switch Expressions:\u00a0 <\/b><span style=\"font-weight: 400;\">In Java 12, the switch statement was made standard and now it supports expressions, making it easier to write and easier to understand.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58866 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/SwitchExpressions.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/SwitchExpressions.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SwitchExpressions-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SwitchExpressions-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SwitchExpressions-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The yield keyword lets us exit a switch expression by returning a value that becomes the value of the switch expression.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58867 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Yield.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Yield.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Yield-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Yield-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Yield-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Teeing Collector:\u00a0 <\/b><span style=\"font-weight: 400;\">You can use the teeing collector in Java 12 to do two different things on a stream, and then use a function to combine them into one result.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58868 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TeeingCollector.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TeeingCollector.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TeeingCollector-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TeeingCollector-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TeeingCollector-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Compact Number Formatting:\u00a0 <\/b><span style=\"font-weight: 400;\">Compact number formatting is a new feature introduced in Java 12 that enables the formatting of numbers in a more compact and human-readable manner, appropriate for different environments.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58869 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/CompactNumberFormatting.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/CompactNumberFormatting.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/CompactNumberFormatting-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/CompactNumberFormatting-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/CompactNumberFormatting-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Text Blocks:\u00a0 <\/b><span style=\"font-weight: 400;\">Java 13 Simplifies the creation of multi-line strings using <\/span><b>&#8220;&#8221;&#8221; &#8220;&#8221;&#8221;.<\/b><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58870 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TextBlocks.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/TextBlocks.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TextBlocks-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TextBlocks-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/TextBlocks-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Records:\u00a0 <\/b><span style=\"font-weight: 400;\">Records are a new class type in Java 14 that offer a clear method to describe classes that are primarily used to hold data. They eliminate boilerplate code by automatically generating equals(), hashCode(), and toString() methods as well as constructors and accessor methods.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58871 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Records.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/Records.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Records-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Records-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/Records-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Pattern Matching instanceOf:\u00a0 <\/b><span style=\"font-weight: 400;\">With instanceof Pattern Matching, you can combine both type checking and casting in one line, making your code easier to read and understand.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58872 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/instanceOf.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/instanceOf.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/instanceOf-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/instanceOf-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/instanceOf-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Sealed Classes :<\/b><span style=\"font-weight: 400;\">You can decide which classes and interfaces can be extended or implemented by using a sealed class. This can help keep your code safe and easier to maintain by limiting how many sub classes you have.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-58873 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/SealedClasses.png\" alt=\"\" width=\"850\" height=\"360\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/09\/SealedClasses.png 850w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SealedClasses-300x127.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SealedClasses-768x325.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/09\/SealedClasses-624x264.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><b>Reactive-Streams\u00a0<\/b><span style=\"font-weight: 400;\">Reactive streams are a great way to manage and process data in an asynchronous and non-blocking way. They&#8217;re especially useful for dealing with files, network requests, and UI events where data might not be available right away.\u00a0 <\/span><span style=\"font-weight: 400;\">Refer: <\/span><a href=\"https:\/\/www.baeldung.com\/java-9-reactive-streams\"><span style=\"font-weight: 400;\">link<\/span><\/a><\/p>\n<div class=\"ap-custom-wrapper\"><\/div><!--ap-custom-wrapper-->","protected":false},"excerpt":{"rendered":"<p>Java is a programming language that has been around for a long time and is renowned for its adaptability and durability. In recent years, Java has experienced a significant expansion and evolution, culminating in the release of Java 8. This blog will provide a brief overview of these versions, emphasizing key features and enhancements. This [&hellip;]<\/p>\n","protected":false},"author":1661,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":363},"categories":[446],"tags":[4844],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/58875"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1661"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=58875"}],"version-history":[{"count":2,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/58875\/revisions"}],"predecessor-version":[{"id":59125,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/58875\/revisions\/59125"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=58875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=58875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=58875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}