@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
@JeanneBoyarsky @ScottSelikoff About Us 2 • Java Developer • CodeRanch Mod • JUG Leader • Java Champion • Java Developer • CodeRanch Mod • JUG Leader • Software Engineer
@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!
@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
@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
@JeanneBoyarsky @ScottSelikoff Where can’t we use? class Inner { var bad = "abc"; } class var {} var noGood; noGood = 4; Also instance variables, etc 13
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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");
@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
@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
@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?
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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