$30 off During Our Annual Pro Sale. View Details »

2022-DevNexus-Java9-11.pdf

 2022-DevNexus-Java9-11.pdf

Jeanne Boyarsky

April 13, 2022
Tweet

More Decks by Jeanne Boyarsky

Other Decks in Technology

Transcript

  1. @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
  2. @JeanneBoyarsky @ScottSelikoff About Us 2 • Java Developer • CodeRanch

    Mod • JUG Leader • Java Champion • Java Developer • CodeRanch Mod • JUG Leader • Software Engineer
  3. @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!
  4. @JeanneBoyarsky @ScottSelikoff Pre-order Java 17 Cert Books 4 May 2022

    Sept 2022
  5. @JeanneBoyarsky @ScottSelikoff 5 808 809 815 + 816 819 829

    Associate Professional Java 8 Java 11 Java 17 Available exams Also 1Z0-811 (Foundations)
  6. @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
  7. @JeanneBoyarsky @ScottSelikoff Type Inference: var 7

  8. @JeanneBoyarsky @ScottSelikoff String name = "Jill"; var name = "Jill";

    List<Integer> 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
  9. @JeanneBoyarsky @ScottSelikoff var name = "Jill"; String name2 = name;

    Compiled code same with var 9
  10. @JeanneBoyarsky @ScottSelikoff Map<String, List<Integer>> grade1= new HashMap<String, List<Integer>>(); vs Map<String,

    List<Integer>> grade1 = new HashMap<>(); vs var grade1 = new HashMap<String, List<Integer>>(); 10
  11. @JeanneBoyarsky @ScottSelikoff var csvPath = createAndGetFile(CSV_DATA); try (var csvWriter =

    Files.newBufferedWriter(csvPath); var csvPrinter = new CSVPrinter( csvWriter, CSVFormat.DEFAULT)); { } 11
  12. @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
  13. @JeanneBoyarsky @ScottSelikoff Where can’t we use? class Inner { var

    bad = "abc"; } class var {} var noGood; noGood = 4; Also instance variables, etc 13
  14. @JeanneBoyarsky @ScottSelikoff Does this work? var var = "var"; 14

  15. @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
  16. @JeanneBoyarsky @ScottSelikoff Lambdas Predicate<String> pred1 = p -> true; Predicate<String>

    pred2 = (String p) -> true; Predicate<String> pred3 = (var p) -> true; 16
  17. @JeanneBoyarsky @ScottSelikoff All or nothing Good (var map, var list)

    -> true No good (var map, list) -> true (var map, List list) -> true 17
  18. @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
  19. @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
  20. @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
  21. @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
  22. @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
  23. @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
  24. @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
  25. @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
  26. @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
  27. @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
  28. @JeanneBoyarsky @ScottSelikoff Collections and Streams 28

  29. @JeanneBoyarsky @ScottSelikoff Creating a non-empty Set Set<String> set = new

    HashSet<>( Arrays.asList("1","2", "3")); Set<String> set = Stream.of("1", "2”, "3") .collect(Collectors.toSet()); Set<String> set = Set.of("1", "2", "3");
  30. @JeanneBoyarsky @ScottSelikoff For consistency Map<String, String> map = Map.of("k", "v");

    Up to 10 params, then varargs List<String> list = List.of("1", "2", "3"); Up to 20 params, then varargs
  31. @JeanneBoyarsky @ScottSelikoff Better Map Map<Integer, Integer> map = Map.ofEntries( Map.entry(1,

    10), Map.entry(2, 20) );
  32. @JeanneBoyarsky @ScottSelikoff Lists • Not equivalent! • List.of(1, 2, 3)

    • Arrays.asList(1, 2, 3) • Only one is immutable 32
  33. @JeanneBoyarsky @ScottSelikoff Streams "abc\n123" .lines() .count(); "abc".chars() .count(); 33

  34. @JeanneBoyarsky @ScottSelikoff Streams - ofNullable stream = dubiousObj == null

    ? Stream.empty() : Stream.of(dubiousObj); stream = Stream.ofNullable(dubiousObj); Optional.ofNullable() existed since Java 8
  35. @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);
  36. @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
  37. @JeanneBoyarsky @ScottSelikoff Streams - takeWhile Stream.iterate( new SimpleEntry<Integer, Integer>(1,1), e

    -> new SimpleEntry<Integer,Integer>( 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?
  38. @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
  39. @JeanneBoyarsky @ScottSelikoff Streams - dropWhile Stream.iterate(new SimpleEntry<Integer, Integer>(1,1), e ->

    new SimpleEntry<Integer, Integer>( 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.
  40. @JeanneBoyarsky @ScottSelikoff Question 6 What does the following output? List<Integer>

    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
  41. @JeanneBoyarsky @ScottSelikoff Question 6 What does the following output? List<Integer>

    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
  42. @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
  43. @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
  44. @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
  45. @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
  46. @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
  47. @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
  48. @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
  49. @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
  50. @JeanneBoyarsky @ScottSelikoff Modules 50

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

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

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

    packageName; } 53
  54. @JeanneBoyarsky @ScottSelikoff Base Module 54

  55. @JeanneBoyarsky @ScottSelikoff Module graph 55

  56. @JeanneBoyarsky @ScottSelikoff Module file “commands” • requires – dependencies •

    requires transitive – grant to caller • exports – share package • opens – for reflection 56
  57. @JeanneBoyarsky @ScottSelikoff Module implications • java.base available by default •

    Can have “private” package • No circular dependencies 57
  58. @JeanneBoyarsky @ScottSelikoff Sample 58

  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 59
  60. @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
  61. @JeanneBoyarsky @ScottSelikoff Question 12 How many modules are available by

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

    default? A. 0 B. 1 C. 2 D. 3 E. 4 62 B
  63. @JeanneBoyarsky @ScottSelikoff Question 13 Which directive allows reflection? A. exports

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

    B. opens C. reflects D. requires E. None of the above 64 B
  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 65
  66. @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
  67. @JeanneBoyarsky @ScottSelikoff Question 15 Which directive takes a module name?

    A. exports B. opens C. reflects D. requires E. None of the above 67
  68. @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
  69. @JeanneBoyarsky @ScottSelikoff 69 Book Giveaway

  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 70
  71. @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
  72. @JeanneBoyarsky @ScottSelikoff Question 17 What does the following output? Map<Integer,

    Integer> 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
  73. @JeanneBoyarsky @ScottSelikoff Question 17 What does the following output? Map<Integer,

    Integer> 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
  74. @JeanneBoyarsky @ScottSelikoff Question 18 What does the following output? Map<Integer,

    Integer> 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
  75. @JeanneBoyarsky @ScottSelikoff Question 18 What does the following output? Map<Integer,

    Integer> 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
  76. @JeanneBoyarsky @ScottSelikoff Question 19 What does the following output? List<Integer>

    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
  77. @JeanneBoyarsky @ScottSelikoff Question 19 What does the following output? List<Integer>

    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