SlideShare a Scribd company logo
By Sander Mak
Coding Your Way
@Sander_Mak
to Java 12
About Sander
Fellow, Software Architect
@ Luminis
Experience in modular
development stacks
Conference Speaker & Author
@Sander_Mak
Java
9
(Sept. 2017)
@Sander_Mak
Quick Java Module Overview
@Sander_Mak
module main {
}
module-info.java
Module Declarations
@Sander_Mak
module main {
}
module-info.java
Module Declarations
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
helper
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper
Well-defined Interfaces
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper.impl
helper
Strong Encapsulation
main.web
main.persistence
main.integration
main
@Sander_Mak
Demo: EasyText
easytext.cli
easytext.analysis
@Sander_Mak
Why?
@Sander_Mak
Why?
Modular JDK
@Sander_Mak
Why?
Modular JDK
Maintainability
Reliable composition
Flexibility
@Sander_Mak
quick refresher
why/advantages
(JDK: modularized, your app: architecture from whiteboard to code, explicit dependencies in language, strong encapsulation, jlink
Why?
Decrease the model-code gap
@Sander_Mak
jlink
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
~25mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
IoT Device
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
Impact on Java 8 codebases
@Sander_Mak
Impact on Java 8 codebases
Use of encapsulated JDK types:
Run-time warnings
Compile-time errors
@Sander_Mak
Impact on Java 8 codebases
Use of encapsulated JDK types:
Run-time warnings
Compile-time errors
Use of enterprise APIs in JDK:
Won't resolve by default
Gone in Java 11!
java.corba
java.xml.bind
java.xml.ws.*
java.activation
java.transaction
@Sander_Mak
R
jshell
E
P
L
@Sander_Mak
R
jshell
E
P
L
ead
@Sander_Mak
R
jshell
E
P
L
ead
val
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
See results
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
See results
Iteratively refine
@Sander_Mak
jshell
DEMO
@Sander_Mak
Collection Factory Methods
@Sander_Mak
List<String> books = new ArrayList<>();
books.add("Java 9 Modularity");
books.add("Designing Data-Intensive Applications");
books.add("Java 8 Lambdas");
Collection Factory Methods
@Sander_Mak
Collection Factory Methods
List<String> books = List.of("Java 9 Modularity",
"Designing Data-Intensive Applications",
"Java 8 Lambdas");
@Sander_Mak
Collection Factory Methods
List<String> books = List.of("Java 9 Modularity",
"Designing Data-Intensive Applications",
"Java 8 Lambdas");
Set.of Map.of
@Sander_Mak
Java
10
(March 2018)
@Sander_Mak
var
@Sander_Mak
var
String name = "Sander";
@Sander_Mak
var
String name = "Sander";
public void aMethod() {
String name = "Sander";
}
@Sander_Mak
var
String name = "Sander";
public void aMethod() {
String name = "Sander";
}
public void aMethod() {
var name = "Sander";
}
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
DEMO
@Sander_Mak
Java
11
(Sept. 2018)
@Sander_Mak
HttpClient
HttpURLConnection
HTTP/2 & WebSocket
Reactive Streams Support
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...
HttpRequest.Builder
newBuilder
newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...
HttpRequest.Builder
HttpResponse
uri
statusCode
body
...newBuilder
newBuilder
HttpClient
@Sander_Mak
HttpClient
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder(URI.create("https://google.com"))
.GET()
.build();
HttpResponse<String> response = httpClient.send(req, BodyHandlers.ofString())
@Sander_Mak
Java
12
(March 2019)
@Sander_Mak
Preview Feature: Switch Expression
@Sander_Mak
Preview Feature: Switch Expression
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
@Sander_Mak
Let's Talk About Adoption
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Long
Term
Support
Java 9
Java 10
Java 12
Java 13
6 months
Java 11 Java 11 LTS
minimum 3 years
@Sander_Mak
Which JDK?
JDK 11 changes the game
Thanks. Read More:
javamodularity.com
@Sander_Mak
bit.ly/ps-sander

More Related Content

What's hot (20)

PPTX
Preparing for java 9 modules upload
Ryan Cuprak
 
PPTX
Node.js Development with Apache NetBeans
Ryan Cuprak
 
PPT
Springboot introduction
Sagar Verma
 
PDF
Java 9, JShell, and Modularity
Mohammad Hossein Rimaz
 
PPTX
Modularization With Project Jigsaw in JDK 9
Simon Ritter
 
PPTX
Modular Java
Martin Toshev
 
PPTX
Advance java Online Training in Hyderabad
Ugs8008
 
PPT
Java EE and Spring Side-by-Side
Reza Rahman
 
PPTX
Java EE 8 Update
Ryan Cuprak
 
PDF
Spring boot jpa
Hamid Ghorbani
 
PDF
Reactjs Basics
Hamid Ghorbani
 
PDF
An Introduction to Play 2 Framework
PT.JUG
 
PDF
108 advancedjava
Anil Kumar
 
PPTX
Next stop: Spring 4
Oleg Tsal-Tsalko
 
PPTX
Building web applications with Java & Spring
David Kiss
 
PDF
Web application development using Play Framework (with Java)
Saeed Zarinfam
 
PDF
The Modern Java Web Developer - Denver JUG 2013
Matt Raible
 
PPTX
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
PPTX
Introduction to Spring Boot
Purbarun Chakrabarti
 
PDF
Java EE 8: On the Horizon
Josh Juneau
 
Preparing for java 9 modules upload
Ryan Cuprak
 
Node.js Development with Apache NetBeans
Ryan Cuprak
 
Springboot introduction
Sagar Verma
 
Java 9, JShell, and Modularity
Mohammad Hossein Rimaz
 
Modularization With Project Jigsaw in JDK 9
Simon Ritter
 
Modular Java
Martin Toshev
 
Advance java Online Training in Hyderabad
Ugs8008
 
Java EE and Spring Side-by-Side
Reza Rahman
 
Java EE 8 Update
Ryan Cuprak
 
Spring boot jpa
Hamid Ghorbani
 
Reactjs Basics
Hamid Ghorbani
 
An Introduction to Play 2 Framework
PT.JUG
 
108 advancedjava
Anil Kumar
 
Next stop: Spring 4
Oleg Tsal-Tsalko
 
Building web applications with Java & Spring
David Kiss
 
Web application development using Play Framework (with Java)
Saeed Zarinfam
 
The Modern Java Web Developer - Denver JUG 2013
Matt Raible
 
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
Introduction to Spring Boot
Purbarun Chakrabarti
 
Java EE 8: On the Horizon
Josh Juneau
 

Similar to Coding Your Way to Java 12 (20)

PDF
Coding Your Way to Java 13
Sander Mak (@Sander_Mak)
 
PDF
Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Codemotion
 
PPTX
Petro Gordiievych "From Java 9 to Java 12"
LogeekNightUkraine
 
ODP
Java 9 Features
NexThoughts Technologies
 
PPTX
What’s expected in Java 9
Gal Marder
 
PDF
What's new in java 9?
Trayan Iliev
 
PDF
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
PPTX
Software Uni Conf October 2014
Nayden Gochev
 
KEY
Getting the most out of Java [Nordic Coding-2010]
Sven Efftinge
 
PPTX
Proposals for new function in Java SE 9 and beyond
Barry Feigenbaum
 
PDF
Java 9
Alican Akkuş
 
PPTX
Java 10, Java 11 and beyond
Rafael Winterhalter
 
PDF
Java 9 / Jigsaw - AJUG/VJUG session
Mani Sarkar
 
PPTX
Java 9 features
shrinath97
 
PDF
JAVA VIVA QUESTIONS_CODERS LODGE.pdf
nofakeNews
 
PDF
What's in the Latest Java
Serhii Voronin
 
PDF
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Mani Sarkar
 
PDF
JSR 335 / java 8 - update reference
sandeepji_choudhary
 
PPTX
Unit 1 – Introduction to Java- (Shilpa R).pptx
shilpar780389
 
PDF
Basic Java Programming
Math-Circle
 
Coding Your Way to Java 13
Sander Mak (@Sander_Mak)
 
Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Codemotion
 
Petro Gordiievych "From Java 9 to Java 12"
LogeekNightUkraine
 
Java 9 Features
NexThoughts Technologies
 
What’s expected in Java 9
Gal Marder
 
What's new in java 9?
Trayan Iliev
 
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
Software Uni Conf October 2014
Nayden Gochev
 
Getting the most out of Java [Nordic Coding-2010]
Sven Efftinge
 
Proposals for new function in Java SE 9 and beyond
Barry Feigenbaum
 
Java 10, Java 11 and beyond
Rafael Winterhalter
 
Java 9 / Jigsaw - AJUG/VJUG session
Mani Sarkar
 
Java 9 features
shrinath97
 
JAVA VIVA QUESTIONS_CODERS LODGE.pdf
nofakeNews
 
What's in the Latest Java
Serhii Voronin
 
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Mani Sarkar
 
JSR 335 / java 8 - update reference
sandeepji_choudhary
 
Unit 1 – Introduction to Java- (Shilpa R).pptx
shilpar780389
 
Basic Java Programming
Math-Circle
 
Ad

More from Sander Mak (@Sander_Mak) (20)

PDF
Scalable Application Development @ Picnic
Sander Mak (@Sander_Mak)
 
PDF
Modules or microservices?
Sander Mak (@Sander_Mak)
 
PDF
Java modularity: life after Java 9
Sander Mak (@Sander_Mak)
 
PDF
Provisioning the IoT
Sander Mak (@Sander_Mak)
 
PDF
Event-sourced architectures with Akka
Sander Mak (@Sander_Mak)
 
PDF
TypeScript: coding JavaScript without the pain
Sander Mak (@Sander_Mak)
 
PDF
The Ultimate Dependency Manager Shootout (QCon NY 2014)
Sander Mak (@Sander_Mak)
 
PDF
Modular JavaScript
Sander Mak (@Sander_Mak)
 
PDF
Modularity in the Cloud
Sander Mak (@Sander_Mak)
 
PDF
Cross-Build Injection attacks: how safe is your Java build?
Sander Mak (@Sander_Mak)
 
KEY
Scala & Lift (JEEConf 2012)
Sander Mak (@Sander_Mak)
 
KEY
Hibernate Performance Tuning (JEEConf 2012)
Sander Mak (@Sander_Mak)
 
PDF
Akka (BeJUG)
Sander Mak (@Sander_Mak)
 
PDF
Fork Join (BeJUG 2012)
Sander Mak (@Sander_Mak)
 
KEY
Fork/Join for Fun and Profit!
Sander Mak (@Sander_Mak)
 
KEY
Kscope11 recap
Sander Mak (@Sander_Mak)
 
KEY
Java 7: Fork/Join, Invokedynamic and the future
Sander Mak (@Sander_Mak)
 
KEY
Scala and Lift
Sander Mak (@Sander_Mak)
 
PDF
Elevate your webapps with Scala and Lift
Sander Mak (@Sander_Mak)
 
KEY
Hibernate performance tuning
Sander Mak (@Sander_Mak)
 
Scalable Application Development @ Picnic
Sander Mak (@Sander_Mak)
 
Modules or microservices?
Sander Mak (@Sander_Mak)
 
Java modularity: life after Java 9
Sander Mak (@Sander_Mak)
 
Provisioning the IoT
Sander Mak (@Sander_Mak)
 
Event-sourced architectures with Akka
Sander Mak (@Sander_Mak)
 
TypeScript: coding JavaScript without the pain
Sander Mak (@Sander_Mak)
 
The Ultimate Dependency Manager Shootout (QCon NY 2014)
Sander Mak (@Sander_Mak)
 
Modular JavaScript
Sander Mak (@Sander_Mak)
 
Modularity in the Cloud
Sander Mak (@Sander_Mak)
 
Cross-Build Injection attacks: how safe is your Java build?
Sander Mak (@Sander_Mak)
 
Scala & Lift (JEEConf 2012)
Sander Mak (@Sander_Mak)
 
Hibernate Performance Tuning (JEEConf 2012)
Sander Mak (@Sander_Mak)
 
Fork Join (BeJUG 2012)
Sander Mak (@Sander_Mak)
 
Fork/Join for Fun and Profit!
Sander Mak (@Sander_Mak)
 
Kscope11 recap
Sander Mak (@Sander_Mak)
 
Java 7: Fork/Join, Invokedynamic and the future
Sander Mak (@Sander_Mak)
 
Scala and Lift
Sander Mak (@Sander_Mak)
 
Elevate your webapps with Scala and Lift
Sander Mak (@Sander_Mak)
 
Hibernate performance tuning
Sander Mak (@Sander_Mak)
 
Ad

Recently uploaded (20)

PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PPTX
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers
Hitachi, Ltd. OSS Solution Center.
 
PDF
NASA A Researcher’s Guide to International Space Station : Earth Observations
Dr. PANKAJ DHUSSA
 
PDF
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PDF
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pdf
ghjghvhjgc
 
PPTX
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
PDF
Linux schedulers for fun and profit with SchedKit
Alessio Biancalana
 
PDF
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
PDF
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
PPTX
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PPTX
Talbott's brief History of Computers for CollabDays Hamburg 2025
Talbott Crowell
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers
Hitachi, Ltd. OSS Solution Center.
 
NASA A Researcher’s Guide to International Space Station : Earth Observations
Dr. PANKAJ DHUSSA
 
NASA A Researcher’s Guide to International Space Station : Fundamental Physics
Dr. PANKAJ DHUSSA
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pdf
ghjghvhjgc
 
Role_of_Artificial_Intelligence_in_Livestock_Extension_Services.pptx
DrRajdeepMadavi
 
Linux schedulers for fun and profit with SchedKit
Alessio Biancalana
 
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
Talbott's brief History of Computers for CollabDays Hamburg 2025
Talbott Crowell
 

Coding Your Way to Java 12