Slide 1

Slide 1 text

@JeanneBoyarsky @ScottSelikoff Wednesday, April 13, 2022 DevNexus speakerdeck.com/boyarsky Preparing for the Java cert and learning new features (part 1 - Java 9 to 11) Jeanne Boyarsky & Scott Selikoff

Slide 2

Slide 2 text

@JeanneBoyarsky @ScottSelikoff About Us 2 • Java Developer • CodeRanch Mod • JUG Leader • Java Champion • Java Developer • CodeRanch Mod • JUG Leader • Software Engineer

Slide 3

Slide 3 text

@JeanneBoyarsky @ScottSelikoff Jeanne & Scott’s Java 8/11 Cert Books 3 • OCA: Java 8 Programmer I Study Guide • OCP: Java 8 Programmer II Study Guide • OCA / OCP Java 8 Practice Tests • OCP Java 11 Programmer I Study Guide • OCP Java 11 Programmer II Study Guide • OCP Java 11 Developer Complete Study Guide • OCP Java 11 Practice Tests Win a book at the end!

Slide 4

Slide 4 text

@JeanneBoyarsky @ScottSelikoff Pre-order Java 17 Cert Books 4 May 2022 Sept 2022

Slide 5

Slide 5 text

@JeanneBoyarsky @ScottSelikoff 5 808 809 815 + 816 819 829 Associate Professional Java 8 Java 11 Java 17 Available exams Also 1Z0-811 (Foundations)

Slide 6

Slide 6 text

@JeanneBoyarsky @ScottSelikoff Agenda 6 • var • Collections and Streams • Modules • Also on exam – other new features like: • Effectively final in try with resources • Changes to interfaces • _ no longer being allowed

Slide 7

Slide 7 text

@JeanneBoyarsky @ScottSelikoff Type Inference: var 7

Slide 8

Slide 8 text

@JeanneBoyarsky @ScottSelikoff String name = "Jill"; var name = "Jill"; List list = List.of(1, 2, 3); var list = List.of(1, 2, 3); • Syntactical sugar/less boilerplate • Type Fixed • Value Mutable (unlike val from Kotlin) 8

Slide 9

Slide 9 text

@JeanneBoyarsky @ScottSelikoff var name = "Jill"; String name2 = name; Compiled code same with var 9

Slide 10

Slide 10 text

@JeanneBoyarsky @ScottSelikoff Map> grade1= new HashMap>(); vs Map> grade1 = new HashMap<>(); vs var grade1 = new HashMap>(); 10

Slide 11

Slide 11 text

@JeanneBoyarsky @ScottSelikoff var csvPath = createAndGetFile(CSV_DATA); try (var csvWriter = Files.newBufferedWriter(csvPath); var csvPrinter = new CSVPrinter( csvWriter, CSVFormat.DEFAULT)); { } 11

Slide 12

Slide 12 text

@JeanneBoyarsky @ScottSelikoff Where can we use? var name = "Jill"; var other = name + 2; var list = List.of(1, 2, 3); for (var num : list) {} 12

Slide 13

Slide 13 text

@JeanneBoyarsky @ScottSelikoff Where can’t we use? class Inner { var bad = "abc"; } class var {} var noGood; noGood = 4; Also instance variables, etc 13

Slide 14

Slide 14 text

@JeanneBoyarsky @ScottSelikoff Does this work? var var = "var"; 14

Slide 15

Slide 15 text

@JeanneBoyarsky @ScottSelikoff Pros Cons Less typing Loss of information Less redundancy Variable names matter more Can scan variable names Be careful! 15 http://openjdk.java.net/projects/amber/LVTIstyle.html

Slide 16

Slide 16 text

@JeanneBoyarsky @ScottSelikoff Lambdas Predicate pred1 = p -> true; Predicate pred2 = (String p) -> true; Predicate pred3 = (var p) -> true; 16

Slide 17

Slide 17 text

@JeanneBoyarsky @ScottSelikoff All or nothing Good (var map, var list) -> true No good (var map, list) -> true (var map, List list) -> true 17

Slide 18

Slide 18 text

@JeanneBoyarsky @ScottSelikoff 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 18 D. 1 E. None of the above

Slide 19

Slide 19 text

@JeanneBoyarsky @ScottSelikoff 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 19 D. 1 E. None of the above D

Slide 20

Slide 20 text

@JeanneBoyarsky @ScottSelikoff Question 2 What is the output? var a = 1; var b = a; double c = b; System.out.println(c); A. a does not compile B. b does not compile C. c does not compile 20 D. 1.0 E. None of the above

Slide 21

Slide 21 text

@JeanneBoyarsky @ScottSelikoff Question 2 What is the output? var a = 1; var b = a; double c = b; System.out.println(c); A. a does not compile B. b does not compile C. c does not compile 21 D. 1.0 E. None of the above D

Slide 22

Slide 22 text

@JeanneBoyarsky @ScottSelikoff Question 3 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 22 D. 1 E. None of the above

Slide 23

Slide 23 text

@JeanneBoyarsky @ScottSelikoff Question 3 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 23 D. 1 E. None of the above C

Slide 24

Slide 24 text

@JeanneBoyarsky @ScottSelikoff Question 4 Which variable declarations compile? var a = null; var b = 1; var c; var var = 3; A. a B. b 24 C. c D. var

Slide 25

Slide 25 text

@JeanneBoyarsky @ScottSelikoff Question 4 Which variable declarations compile? var a = null; var b = 1; var c; var var = 3; A. a B. b 25 C. c D. var B, D

Slide 26

Slide 26 text

@JeanneBoyarsky @ScottSelikoff Question 5 Which variable declarations compile? var a; a = 1; static var b = 1; int x=1, var y=1; var VAR = 1; A. a B. b 26 C. y D. VAR

Slide 27

Slide 27 text

@JeanneBoyarsky @ScottSelikoff Question 5 Which variable declarations compile? var a; a = 1; static var b = 1; int x=1, var y=1; var VAR = 1; A. a B. b 27 C. y D. VAR D

Slide 28

Slide 28 text

@JeanneBoyarsky @ScottSelikoff Collections and Streams 28

Slide 29

Slide 29 text

@JeanneBoyarsky @ScottSelikoff Creating a non-empty Set Set set = new HashSet<>( Arrays.asList("1","2", "3")); Set set = Stream.of("1", "2”, "3") .collect(Collectors.toSet()); Set set = Set.of("1", "2", "3");

Slide 30

Slide 30 text

@JeanneBoyarsky @ScottSelikoff For consistency Map map = Map.of("k", "v"); Up to 10 params, then varargs List list = List.of("1", "2", "3"); Up to 20 params, then varargs

Slide 31

Slide 31 text

@JeanneBoyarsky @ScottSelikoff Better Map Map map = Map.ofEntries( Map.entry(1, 10), Map.entry(2, 20) );

Slide 32

Slide 32 text

@JeanneBoyarsky @ScottSelikoff Lists • Not equivalent! • List.of(1, 2, 3) • Arrays.asList(1, 2, 3) • Only one is immutable 32

Slide 33

Slide 33 text

@JeanneBoyarsky @ScottSelikoff Streams "abc\n123" .lines() .count(); "abc".chars() .count(); 33

Slide 34

Slide 34 text

@JeanneBoyarsky @ScottSelikoff Streams - ofNullable stream = dubiousObj == null ? Stream.empty() : Stream.of(dubiousObj); stream = Stream.ofNullable(dubiousObj); Optional.ofNullable() existed since Java 8

Slide 35

Slide 35 text

@JeanneBoyarsky @ScottSelikoff Streams - iterate Stream.iterate(10, i-> i-1) .limit(10) .forEach(System.out::println); Stream.iterate(10, i-> i>0, i-> i-1) .forEach(System.out::println);

Slide 36

Slide 36 text

@JeanneBoyarsky @ScottSelikoff 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. So prints the numbers 1-4

Slide 37

Slide 37 text

@JeanneBoyarsky @ScottSelikoff 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 print all Fibonacci #s less than 30?

Slide 38

Slide 38 text

@JeanneBoyarsky @ScottSelikoff 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. So prints the numbers 5-9

Slide 39

Slide 39 text

@JeanneBoyarsky @ScottSelikoff 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.

Slide 40

Slide 40 text

@JeanneBoyarsky @ScottSelikoff Question 6 What does the following output? List list = List.of(1, 2, 3); list.remove(2); System.out.println(list); A. [1, 2, 3] B. [1, 3] C. [1, 2] 40 D. Code does not compile E. Throws exception

Slide 41

Slide 41 text

@JeanneBoyarsky @ScottSelikoff Question 6 What does the following output? List list = List.of(1, 2, 3); list.remove(2); System.out.println(list); A. [1, 2, 3] B. [1, 3] C. [1, 2] 41 D. Code does not compile E. Throws exception E

Slide 42

Slide 42 text

@JeanneBoyarsky @ScottSelikoff Question 7 What does the following output? List list = Arrays.asList(1, 2, 3); list.remove(2); System.out.println(list); A. [1, 2, 3] B. [1, 3] C. [1, 2] 42 D. Code does not compile E. Throws exception

Slide 43

Slide 43 text

@JeanneBoyarsky @ScottSelikoff Question 7 What does the following output? List list = Arrays.asList(1, 2, 3); list.remove(2); System.out.println(list); A. [1, 2, 3] B. [1, 3] C. [1, 2] 43 D. Code does not compile E. Throws exception E

Slide 44

Slide 44 text

@JeanneBoyarsky @ScottSelikoff Question 8 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 44 D. The code does not compile E. None of the above

Slide 45

Slide 45 text

@JeanneBoyarsky @ScottSelikoff Question 8 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 45 D. The code does not compile E. None of the above D

Slide 46

Slide 46 text

@JeanneBoyarsky @ScottSelikoff Question 9 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 46 D. The code does not compile E. None of the above

Slide 47

Slide 47 text

@JeanneBoyarsky @ScottSelikoff Question 9 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 47 D. The code does not compile E. None of the above C

Slide 48

Slide 48 text

@JeanneBoyarsky @ScottSelikoff Question 10 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 48 D. The code does not compile E. None of the above

Slide 49

Slide 49 text

@JeanneBoyarsky @ScottSelikoff Question 10 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 49 D. The code does not compile E. None of the above B

Slide 50

Slide 50 text

@JeanneBoyarsky @ScottSelikoff Modules 50

Slide 51

Slide 51 text

@JeanneBoyarsky @ScottSelikoff Module basics • Module system • JDK is modularized 51

Slide 52

Slide 52 text

@JeanneBoyarsky @ScottSelikoff Simple module /src /package1 /module-info.class /MyClass.class 52

Slide 53

Slide 53 text

@JeanneBoyarsky @ScottSelikoff Module info module moduleName { requires otherModuleName; exports packageName; } 53

Slide 54

Slide 54 text

@JeanneBoyarsky @ScottSelikoff Base Module 54

Slide 55

Slide 55 text

@JeanneBoyarsky @ScottSelikoff Module graph 55

Slide 56

Slide 56 text

@JeanneBoyarsky @ScottSelikoff Module file “commands” • requires – dependencies • requires transitive – grant to caller • exports – share package • opens – for reflection 56

Slide 57

Slide 57 text

@JeanneBoyarsky @ScottSelikoff Module implications • java.base available by default • Can have “private” package • No circular dependencies 57

Slide 58

Slide 58 text

@JeanneBoyarsky @ScottSelikoff Sample 58

Slide 59

Slide 59 text

@JeanneBoyarsky @ScottSelikoff Question 11 Which directive allows callers to access a package? A. exports B. opens C. reflects D. requires E. None of the above 59

Slide 60

Slide 60 text

@JeanneBoyarsky @ScottSelikoff Question 11 Which directive allows callers to access a package? A. exports B. opens C. reflects D. requires E. None of the above 60 A

Slide 61

Slide 61 text

@JeanneBoyarsky @ScottSelikoff Question 12 How many modules are available by default? A. 0 B. 1 C. 2 D. 3 E. 4 61

Slide 62

Slide 62 text

@JeanneBoyarsky @ScottSelikoff Question 12 How many modules are available by default? A. 0 B. 1 C. 2 D. 3 E. 4 62 B

Slide 63

Slide 63 text

@JeanneBoyarsky @ScottSelikoff Question 13 Which directive allows reflection? A. exports B. opens C. reflects D. requires E. None of the above 63

Slide 64

Slide 64 text

@JeanneBoyarsky @ScottSelikoff Question 13 Which directive allows reflection? A. exports B. opens C. reflects D. requires E. None of the above 64 B

Slide 65

Slide 65 text

@JeanneBoyarsky @ScottSelikoff Question 14 Which is true of modules? A. A single class can be exported. B. A single package can be exported C. They require a module-def file D. They require a module-info file E. None of the above 65

Slide 66

Slide 66 text

@JeanneBoyarsky @ScottSelikoff Question 14 Which is true of modules? A. A single class can be exported. B. A single package can be exported C. They require a module-def file D. They require a module-info file E. None of the above 66 B, D

Slide 67

Slide 67 text

@JeanneBoyarsky @ScottSelikoff Question 15 Which directive takes a module name? A. exports B. opens C. reflects D. requires E. None of the above 67

Slide 68

Slide 68 text

@JeanneBoyarsky @ScottSelikoff Question 15 Which directive takes a module name? A. exports B. opens C. reflects D. requires E. None of the above 68 D

Slide 69

Slide 69 text

@JeanneBoyarsky @ScottSelikoff 69 Book Giveaway

Slide 70

Slide 70 text

@JeanneBoyarsky @ScottSelikoff Question 16 What is output when run java Output.java? A. 5 B. 6 C. Code does not compile D. Code throws an exception at runtime 70

Slide 71

Slide 71 text

@JeanneBoyarsky @ScottSelikoff Question 16 What is output when run java Output.java? A. 5 B. 6 C. Code does not compile D. Code throws an exception at runtime 71 C

Slide 72

Slide 72 text

@JeanneBoyarsky @ScottSelikoff Question 17 What does the following output? Map map = Map.of(1, 2, 3, 4); System.out.println(map.get(2)); A. 1 B. 2 C. null 72 D. Code does not compile E. Throws exception

Slide 73

Slide 73 text

@JeanneBoyarsky @ScottSelikoff Question 17 What does the following output? Map map = Map.of(1, 2, 3, 4); System.out.println(map.get(2)); A. 1 B. 2 C. null 73 D. Code does not compile E. Throws exception C

Slide 74

Slide 74 text

@JeanneBoyarsky @ScottSelikoff Question 18 What does the following output? Map map = Map.of(1, 2, 3); System.out.println(map.get(2)); A. 1 B. 2 C. null 74 D. Code does not compile E. Throws exception

Slide 75

Slide 75 text

@JeanneBoyarsky @ScottSelikoff Question 18 What does the following output? Map map = Map.of(1, 2, 3); System.out.println(map.get(2)); A. 1 B. 2 C. null 75 D. Code does not compile E. Throws exception D

Slide 76

Slide 76 text

@JeanneBoyarsky @ScottSelikoff Question 19 What does the following output? List list = List.of(1, 2, 3); list.set(1, 0); System.out.println(list); A. [1, 0, 3] B. [1, 2, 3] C. null 76 D. Code does not compile E. Throws exception

Slide 77

Slide 77 text

@JeanneBoyarsky @ScottSelikoff Question 19 What does the following output? List list = List.of(1, 2, 3); list.set(1, 0); System.out.println(list); A. [1, 0, 3] B. [1, 2, 3] C. null 77 D. Code does not compile E. Throws exception E