@JeanneBoyarsky @ScottSelikoff @omniprof
Wednesday, September 18, 2019
Oracle Code One (HOL18122)
Hands On Java 11 OCP Certification
Prep
Jeanne Boyarsky, Scott Selikoff
& Ken Fogel
@JeanneBoyarsky @ScottSelikoff @omniprof
Pre-order Java 11 Cert Books
5
Book I (Exam 1Z0-815) available in November
Slide 6
Slide 6 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Disclaimers
1. A bit of the material is from our books.
2. Some of the material in this presentation may
appear in our upcoming certification books.
6
Slide 7
Slide 7 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Agenda
7
I. Certification Overview
II. Modules
III. Lab #1
IV. Small features
V. Var/Stream Changes
VI. Lab #2
...then Off to CloudFest @ Chase Center!
Slide 8
Slide 8 text
@JeanneBoyarsky @ScottSelikoff @omniprof
I. Certification Overview
8
What is the OCP Java
SE 11 Developer
Certification?
Slide 9
Slide 9 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Previous Certification History
9
+ upgrade
Slide 10
Slide 10 text
@JeanneBoyarsky @ScottSelikoff @omniprof
New Certification Path
10
Slide 11
Slide 11 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Java 11 Path
11
1Z0-815
(OCP part 1)
1Z0-816
(OCP part 2)
+
OCP: Java SE
11 Developer
Yes, 2 OCP
level exams
No cert granted for
completing 1Z0-815
OCP Part 1 (1Z0-815)
similar to OCA 8 (1Z0-808)
exam, but much harder!
Slide 12
Slide 12 text
@JeanneBoyarsky @ScottSelikoff @omniprof
If you have an older cert
If already passed Need to take
OCP 6, 7, 8 1Z0-817 (upgrade
exam)
OCA 6, 7, 8 1Z0-816 (part 2)
OCJP/SCJP 1.5 or
earlier
1Z0-815 (part 1) +
1Z0-816 (part 2)
12
Slide 13
Slide 13 text
@JeanneBoyarsky @ScottSelikoff @omniprof
II. Modules
13
Slide 14
Slide 14 text
@JeanneBoyarsky @ScottSelikoff @omniprof
JDK has been modularized
14
java.base
JDK
java.logging
java.sql
+ many more
java.base
automatically
available
@JeanneBoyarsky @ScottSelikoff @omniprof
Module file “commands”
• requires – dependencies
• requires transitive – grant to caller
• exports – share package
• exports to – share package with specific
module
• opens – for reflection
• provides/uses – for services
18
Slide 19
Slide 19 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Module implications
• Can have “private” package
• No circular dependencies
19
Slide 20
Slide 20 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 1
Given a module, which command allows other
modules to access a package it defines?
A. exports
B. opens
C. reflects
D. requires
E. None of the above
20
Slide 21
Slide 21 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 2
How many modules are available by default?
A. 0
B. 1
C. 2
D. 3
E. 4
21
Slide 22
Slide 22 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 3
Which module command allows reflection?
A. exports
B. opens
C. reflects
D. requires
E. None of the above
22
Slide 23
Slide 23 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 4
Which are true of the module-info?
A. It must have a public modifier
B. It cannot have a public modifier
C. It appears at the root of the module
D. Its name is moduleInfo.java
23
Slide 24
Slide 24 text
@JeanneBoyarsky @ScottSelikoff @omniprof
III. Lab #1
• Required Software for Today
• Java 11
• Editor or IDE of your choice
• Note: we don’t recommend using an IDE to
study for the cert, but we only have two hours
24
Slide 25
Slide 25 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Labs
• We will sprinkle in some concepts from earlier
versions of Java into the labs. (ex: reading from a
file).
• If you are not familiar with these, it is fine to Google
or ask us for help.
• Sample solutions are in the github repo.
25
Slide 26
Slide 26 text
@JeanneBoyarsky @ScottSelikoff @omniprof
III. Lab #1
26
https://github.com/boyarsky/2019-oraclecodeone-cert-hol
Slide 27
Slide 27 text
@JeanneBoyarsky @ScottSelikoff @omniprof
IV. Small Features
• Underscore (_)
• private interface methods
• effectively final in
try-with-resources
27
Slide 28
Slide 28 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Underscores
• Single _ no longer a valid identifier
• Double underscore valid
• $, numbers, and letters valid
• Why? Positioning for future
28
Slide 29
Slide 29 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Private methods
• private and private static methods allowed in
interfaces
• Why? Can be used by static and default
methods to reduce code duplication
• Can’t be used outside of interface declaration
29
Slide 30
Slide 30 text
@JeanneBoyarsky @ScottSelikoff @omniprof
6 Types Allowed in Interfaces
Type Scope/Modifiers
Constants public static final
Abstract Methods public abstract
Default Methods (8) public default
Instance Methods (9) private
Public Static Methods (8) public static
Private Static Methods (9) private static
30
Slide 31
Slide 31 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Effectively Final Definition
• Added in Java 8
• If typed final before param/local variable
and it would still compile
• Can be used in lambda expressions
31
Slide 32
Slide 32 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Which are effectively final?
int numChairs = 4;
int numLegs = numChairs * 4;
numChairs++;
System.out.println(numChairs);
UnaryOperator rc1 = r -> r * numChairs;
UnaryOperator rc2 = r -> r * numLegs;
32
Slide 33
Slide 33 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Try-with-Resources - Before
• Resource must be declared with try-with-resources
Path path = Paths.get("file");
try(BufferedReader reader =
Files.newBufferedReader(path)){
// read file
}
33
Slide 34
Slide 34 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Try-with-Resources - After
• Effectively final resources can be declared before
try-with-resources
Path path = Paths.get("file");
BufferedReader r = Files.newBufferedReader(path);
try(r) {
// read file
}
34
Slide 35
Slide 35 text
@JeanneBoyarsky @ScottSelikoff @omniprof
What’s wrong here?
Connection con =
DriverManager.getConnection(url);
PreparedStatement ps =
con.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
try (con; ps; rs) {
while (rs.next()) {
// process result set
} }
Resource leak!
35
Slide 36
Slide 36 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 1
Which of the following compile?
A. String _a = null;
B. String _1 = null;
C. String $ = null;
D. String _ = null;
E. String __ = 1;
36
Slide 37
Slide 37 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 2
Which can fill in the blank?
interface TheInterface {
____ int method() { return 1; } }
A. public
B. protected
C. no modifier
37
D. private
E. None of the above
Slide 38
Slide 38 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 3
Which can fill in the blank?
interface TheInterface {
____ static void method() {} }
A. public
B. protected
C. no modifier
38
D. private
E. None of the above
Slide 39
Slide 39 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 4
How many identifiers could have independently
been changed to _ in Java 9?
A. 0
B. 1-2
C. 3-4
39
D. 5 or more
E. None – code does
not compile
public interface Planet {
int COUNT = 1;
void add(int num);
private static int getCount() { return COUNT; }
}
Slide 40
Slide 40 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 5
Which is true at the end of the code block?
A. Reader is closed
B. Reader remains open
C. None; the code does not compile
40
Slide 41
Slide 41 text
@JeanneBoyarsky @ScottSelikoff @omniprof
V. Var/Stream Changes
• Var (local variable
type inference)
• Streams
41
Slide 42
Slide 42 text
@JeanneBoyarsky @ScottSelikoff @omniprof
String name = "SF";
var name = "Jeanne";
List list = List.of(1, 2, 3);
var list = List.of(1, 2, 3);
• Syntactical sugar/less boilerplate
• Not immutable (no val)
42
Slide 43
Slide 43 text
@JeanneBoyarsky @ScottSelikoff @omniprof
List headers =
thead.findElements(By.tagName("th"));
VolunteerDashboardRow headerRow = new
VolunteerDashboardRow(headers);
vs
var headers =
thead.findElements(By.tagName("th"));
var headerRow = new
VolunteerDashboardRow(headers);
43
Slide 44
Slide 44 text
@JeanneBoyarsky @ScottSelikoff @omniprof
var csvPath = createAndGetFile(CSV_DATA);
try (var csvWriter =
Files.newBufferedWriter(csvPath);
var csvPrinter = new
CSVPrinter(csvWriter,
CSVFormat.DEFAULT)); {
}
44
Slide 45
Slide 45 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Map productMap1
= new HashMap();
Map productMap2
= new HashMap<>();
var productMap3
= new HashMap();
45
Slide 46
Slide 46 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Where can we use?
var name = "SF";
var other = name + 2;
var list = List.of(1, 2, 3);
for (var num : list) {}
(@NotNull var map, var list) -> true;
46
Slide 47
Slide 47 text
@JeanneBoyarsky @ScottSelikoff @omniprof
All or nothing
Good
(var map, var list) -> true
No good
(var map, list) -> true
(var map, List list) -> true
47
Slide 48
Slide 48 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Where can’t we use?
class Inner { var bad = "abc"; }
var noGood;
noGood = 4;
Also instance variables, etc
48
Slide 49
Slide 49 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Does this work?
var var = "var";
49
Slide 50
Slide 50 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Pros Cons
Less typing Loss of information
Less redundancy Variable names matter
more
Can scan variable
names
Be careful!
50
http://openjdk.java.net/projects/amber/LVTIstyle.html
@JeanneBoyarsky @ScottSelikoff @omniprof
Streams - takeWhile
Stream.iterate(1, i-> i< 10, i-> i + 1)
.takeWhile(i -> i < 5)
.forEach(System.out::println);
Assumes ordered stream. Takes all elements until one
doesn’t match. Prints the numbers 1-4
54
Slide 55
Slide 55 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Streams - takeWhile
Stream.iterate(
new SimpleEntry(1,1),
e -> new SimpleEntry(
e.getValue(), e.getKey()+e.getValue()))
.map(Entry::getValue)
.takeWhile(n -> n < 30)
.forEach(System.out::println);
How to print all Fibonacci #s less than 30?
55
Slide 56
Slide 56 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Streams - dropWhile
Stream.iterate(1, i-> i< 10, i-> i + 1)
.dropWhile(i -> i < 5)
.forEach(System.out::println);
Assumes ordered stream. Takes all elements until one
doesn’t match. Prints the numbers 5-9
56
Slide 57
Slide 57 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Streams - dropWhile
Stream.iterate(new SimpleEntry(1,1),
e -> new SimpleEntry(
e.getValue(), e.getKey()+e.getValue()))
.map(Entry::getValue)
.dropWhile(n -> n < 30)
.forEach(System.out::println);
Note: This doesn’t work. takeWhile and dropWhile aren’t
always opposites.
57
Slide 58
Slide 58 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 1
What is the output?
var a = 1; var b = a;
int c = b; System.out.println(c);
A. a does not compile
B. b does not compile
C. c does not compile
58
D. 1
E. None of the above
Slide 59
Slide 59 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 2
What is the output?
var a = 1; var b = a;
String c = b; System.out.println(c);
A. a does not compile
B. b does not compile
C. c does not compile
59
D. 1
E. None of the above
Slide 60
Slide 60 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 3
Which variable declarations compile?
var a = null; var b = 1;
var c; var var = 3;
A. a
B. b
60
C. c
D. var
Slide 61
Slide 61 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 4
Which allow using var?
A. Inner class instance variables
B. Lambda variables
C. Static variables
D. Try-with-resources
61
Slide 62
Slide 62 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 5
What does the following output?
long count = Stream
.iterate(1; i-> i< 10; i-> i+2).count();
System.out.println(count);
A. 0
B. 5
C. 10
62
D. The code does not
compile
E. None of the above
Slide 63
Slide 63 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 6
What does the following output?
Stream.iterate(1, i-> i< 10, i-> i++)
.takeWhile(i -> i < 5)
.forEach(System.out::println);
A. The numbers 1-4
B. The numbers 5-9
C. An infinite stream
63
D. The code does not
compile
E. None of the above
Slide 64
Slide 64 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 7
What does the following output?
long count = Stream
.iterate(1, i-> i< 10, i-> i+2).count();
System.out.println(count);
A. 0
B. 5
C. 10
64
D. The code does not
compile
E. None of the above
Slide 65
Slide 65 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 8
What does the following output?
Stream.iterate(1, i-> i< 10, i-> ++i)
.dropWhile(i -> i < 5)
.forEach(System.out::println);
A. The numbers 1-4
B. The numbers 5-9
C. An infinite stream
65
D. The code does not
compile
E. None of the above
Slide 66
Slide 66 text
@JeanneBoyarsky @ScottSelikoff @omniprof
Question 9
What does the following output?
long count = Stream.of(null).count();
System.out.println(count);
A. 0
B. 1
C. null
66
D. The code does not
compile
E. None of the above
Slide 67
Slide 67 text
@JeanneBoyarsky @ScottSelikoff @omniprof
VI. Lab #2
67
(when done have a beer at CloudFest)