Files Included :
001 Lambdas - Introduction (68.08 MB)
002 Lambdas - using a custom Functional Interface (in code) (25.25 MB)
003 Lambdas - using Predicate (in code) (46.07 MB)
004 API Functional Interfaces - Predicate and BiPredicate (9.88 MB)
005 API Functional Interfaces - Supplier (9.72 MB)
006 API Functional Interfaces - Consumer and BiConsumer (37.56 MB)
007 API Functional Interfaces - Function and BiFunction (19.87 MB)
008 API Functional Interfaces - UnaryOperator and BinaryOperator (27.83 MB)
009 Lambdas - final and 'effectively final' (16.34 MB)
010 Method References (19.26 MB)
011 Bound Method References (20.12 MB)
012 Unbound Method References (20.31 MB)
013 Static Method References (13.48 MB)
014 Constructor Method References (12.1 MB)
015 The Importance of Context for Method References (54.79 MB)
001 Cloning Advanced Java repo (28.68 MB)
002 Cloning Spring Boot repos (16.12 MB)
001 Introduction and Stream Pipelines (33.53 MB)
002 Stream Laziness (51.52 MB)
003 Creating Streams (73.18 MB)
004 Terminal Operations (31.98 MB)
005 Terminal Operations - reduce() (43.76 MB)
006 Terminal Operations - collect() (9.66 MB)
007 Terminal Operations - collect() - Collectors toMap() (33.27 MB)
008 Terminal Operations - collect() - Collectors groupingBy() (16 MB)
009 Terminal Operations - collect() - Collectors partitioningBy() (7.68 MB)
010 Intermediate Operations - filter(), distinct(), limit() (52.27 MB)
011 Intermediate Operations - map(), flatMap(), sorted() (50.57 MB)
012 Primitive Streams - Creating (16.76 MB)
013 Primitive Streams - API (17.87 MB)
014 Primitive Streams - Functional Interfaces (15.16 MB)
015 Primitive Streams - Mapping Streams (30.03 MB)
016 Code - mappingObjectStreams() (14.77 MB)
017 Code - mappingPrimitiveStreams() (15.98 MB)
018 Optionals (28.13 MB)
019 Parallel Streams (17.31 MB)
001 Collections - Introduction (19.61 MB)
002 Common Collection Methods in Code (17.83 MB)
003 List (23.17 MB)
004 Lists in Code (50.36 MB)
005 Set (6.02 MB)
006 Sets in Code (26.67 MB)
007 Maps (16.84 MB)
008 Maps in Code (44.51 MB)
009 Queue and Deque (13.3 MB)
010 Queue and Deque in Code (44.99 MB)
011 PriorityQueue (14.98 MB)
012 Sorting - Comparable and Comparator (86.5 MB)
013 Code Comparable - Product (9.65 MB)
014 Code Comparable and Comparator - Sorting Arrays and Lists - Dog (35.53 MB)
015 Code Sorting by Multiple Fields (5.96 MB)
016 Code TreeSet Comparable issue - how to resolve with Comparator (26.63 MB)
017 Code Binary Search (41.41 MB)
018 Generics - Introduction (25.15 MB)
019 Generics - polymorphism, extends, super (53.61 MB)
020 Generics - super and extends (in detail) (145.5 MB)
021 Generic Classes and Interfaces (29.64 MB)
022 Generic Methods (16.15 MB)
023 equals() (39.86 MB)
024 hashCode() (30.64 MB)
025 Hashing in code (44.86 MB)
026 Watch out for mutable fields in hashing (16.28 MB)
001 Introduction (13.39 MB)
002 Creating Threads (17.35 MB)
003 sleep() and join() (14.9 MB)
004 ExecutorService (Introduction) (53.64 MB)
005 ExecutorService (code) (14.7 MB)
006 Submitting Task Collections (code) (26.28 MB)
007 Scheduling Tasks (39.86 MB)
008 Thread Safety - Introduction (1.67 MB)
009 Data Race Demo (6.15 MB)
010 Atomic Classes (8.85 MB)
011 AtomicInteger example (code) (5.37 MB)
012 synchronized keyword (10.31 MB)
013 synchronized example (code) (37.26 MB)
014 Lock interface (12.19 MB)
015 Lock example (code) (7.32 MB)
016 Concurrent Collections - Introduction (7.93 MB)
017 Concurrent Collections - API (1.84 MB)
018 Concurrent Collections - SkipList Collections (7.92 MB)
019 Concurrent Collections - CopyOnWriteCollections (37.64 MB)
020 Concurrent Collections - BlockingQueue (7.28 MB)
021 Concurrent Collections - synchronized collections (14.14 MB)
022 Concurrency - Threading problems - Race Condition (35.38 MB)
023 Concurrency - Threading problems - Deadlock (14.29 MB)
024 Concurrency - Threading problems - Livelock and Starvation (6.66 MB)
001 Introduction and Creating locales (35.99 MB)
002 Localising Numbers and Currencies (Introduction) (4.54 MB)
003 Localising Numbers and Currencies (42.78 MB)
004 Localising numbers using custom formats (11.46 MB)
005 Localising Dates (12 MB)
006 Locale Category enums (13.9 MB)
007 Resource Bundles, Property Files and Searching (19.02 MB)
008 Resource Bundle Searching - Example (50.99 MB)
001 JDBC Introduction (8.57 MB)
002 Banking Example Setup (12.72 MB)
003 Connecting to a Database (14.89 MB)
004 PreparedStatement (14.58 MB)
005 BankService - SELECT one (41.47 MB)
006 BankService - SELECT all (10.7 MB)
007 Bank Service DELETE oneall (11.94 MB)
008 BankService - INSERT (11.68 MB)
009 BankService - UPDATE (15.85 MB)
010 CallableStatement (45.7 MB)
011 Resource Leaks (3.57 MB)
001 IO (112.29 MB)
002 NIO 2 (492.42 MB)
001 Local Variable Type Inference (LVTI) (63.59 MB)
001 Private Interface Methods (43.79 MB)
001 Annotations (296.33 MB)
001 Security (186.23 MB)
001 Introduction (48.29 MB)
002 Compiler and Runtime flags (10.34 MB)
003 Hello World Example (19.73 MB)
003 TestModuleFarm (2.31 KB)
003 TestModuleFarm2 (2.85 KB)
004 Dependencies (25.62 MB)
004 TestModuleFarm3 (22.31 KB)
005 opens and requires transitive (21.48 MB)
005 TestModuleFarm3 (22.31 KB)
006 Operations on a Module (34.49 MB)
007 OwnerService (9.97 KB)
007 Services (19.21 MB)
008 Services - SoftDrink Example (53.66 MB)
008 SoftDrinkService (17.63 KB)
009 Types of Modules (36.33 MB)
009 TypesOfModules (8.34 KB)
010 Migration Strategies (35.42 MB)
001 Java 17 Introduction (1.66 MB)
001 Java-17-Course-source-code (7.8 KB)
001 Sealed classes (15.96 MB)
001 Records (141.61 MB)
001 switch expressions and pattern matching (79.42 MB)
001 Text blocks (88.98 MB)
001 Java 21 Introduction (42.92 MB)
002 IDE and javac (15.4 MB)
001 Unnamed Classes and Instance Main Methods (52.14 MB)
002 Unnamed Classes and Instance Main Methods (Code) (16.58 MB)
001 Record Patterns (29.89 MB)
002 Record Patterns (in code) (37.41 MB)
001 Pattern Matching for Switch (91.97 MB)
002 Pattern Matching for Switch (code) (54.42 MB)
001 Sequenced Collections (21.61 MB)
002 Java 21 - Sequenced Collections (Code) (50.74 MB)
001 Application Architecture (12.78 MB)
002 Spring Boot Setup (start spring io) (27.9 MB)
002 Spring-Boot-Cars-Application (25.44 KB)
003 H2 Database Configuration (20.18 MB)
004 High-level Packages and ApplicationContext Overview (8.27 MB)
005 Controller Layer Overview (20.33 MB)
006 Service Layer Overview (26.74 MB)
007 Repository Layer Overview (15.05 MB)
008 Car Application - POST (add) (109.27 MB)
009 Car Application - GET (retrieve) (55.54 MB)
010 Car Application - PUT (update) (31.86 MB)
011 Car Application - DELETE (remove) (32.08 MB)
012 Car Application - HEAD (as with GET but no response body returned) (5.93 MB)
013 Car Application - OPTIONS (Allow header in response contains verbs allowed) (23.4 MB)
014 Query by Car Type (25.28 MB)
015 Gotchas (21.08 MB)
016 Adding Hypermedia As The Engine Of Application State (HATEOAS) (62.35 MB)
017 Assignment Solution - Configuration (17.69 MB)
018 Assignment Solution - Packages Overview and Entity Bean (25.46 MB)
019 Assignment Solution - adding books (POST) (44.02 MB)
020 Assignment Solution - retrieving books (GET) (69.28 MB)
021 Assignment Solution - deleting books (DELETE) (30.93 MB)
022 Assignment Solution - updating a book (PUT) (45.87 MB)
023 Assignment Solution - custom query using queryrequest parameters (47.96 MB)
024 Assignment Solution - 405 Method Not Allowed (6.58 MB)
025 Assignment Solution - supporting OPTIONS (10.38 MB)
001 Inheritance and Polymorphism (ocpjp v8 2 1722) (42.95 MB)
002 Object methods - equalshashCode (ocpjp v8 2 1298) (115.73 MB)
003 Object methods - equalshashCode (ocpjp v8 2 1808) (44.14 MB)
004 Inheritance and Polymorphism (ocpjp v8 2 1234) (4.74 MB)
005 Inheritance and Polymorphism (ocpjp v8 2 1531) (69.16 MB)
006 Object methods - equalshashCode (ocpjp v8 2 1332) (5.1 MB)
007 Inheritance and Polymorphism (ocpjp v8 2 1825) (101.15 MB)
008 Object methods - equalshashCode (ocpjp v8 2 1459) (67.79 MB)
009 Inheritance and Polymorphism (ocpjp v8 2 1088) (8.52 MB)
010 Singleton and Immutable Classes (ocpjp v8 2 1190) (1.07 MB)
011 Inheritance and Polymorphism (ocpjp v8 2 1593) (9.59 MB)
012 Inheritance and Polymorphism (ocpjp v8 2 1436) (7.8 MB)
013 Object methods - equalshashCode (ocpjp v8 2 1244) (29.33 MB)
014 Object methods - equalshashCode (ocpjp v8 2 1304) (114.21 MB)
015 Object methods - equalshashCode (ocpjp v8 2 1340) (66.62 MB)
016 Inheritance and Polymorphism - with diagrams - ocpjp v11 2 970 (5.81 MB)
001 Inner Classes (ocpjp v8 2 1893) (52.56 MB)
002 Enumerated Types (ocpjp v8 2 1508) (48.22 MB)
003 Enumerated Types (ocpjp v8 2 1463) (94.34 MB)
004 Abstract Classes (ocpjp v8 2 1763) (8.18 MB)
005 Enumerated Types (ocpjp v8 2 1437) (60.52 MB)
006 Inner Classes (ocpjp v8 2 1394) (24.41 MB)
007 Interfaces (ocpjp v8 2 1771) (11.3 MB)
008 Inner Classes (ocpjp v8 2 1383) (22.09 MB)
009 Enumerated Types (ocpjp v8 2 1388) (11.87 MB)
010 Inner Classes (ocpjp v8 2 1586) (10.32 MB)
011 Inner Classes (ocpjp v8 2 1550) (4.63 MB)
012 Enumerated Types (ocpjp v8 2 1461) (7.17 MB)
013 Enumerated Types (ocpjp v8 2 1457) (47.91 MB)
014 Abstract Classes (ocpjp v8 2 1527) (12.45 MB)
015 Inner Classes (ocpjp v8 2 1580) (52.06 MB)
001 Collection API (ocpjp v8 2 1300) (86.3 MB)
002 TreeSet (ocpjp v8 2 1471) (12.26 MB)
003 Collection API (ocpjp v8 2 1310) (24.25 MB)
004 Generic classes (ocpjp v8 2 1112) (7.54 MB)
005 Collection API (ocpjp v8 2 1511) (10.57 MB)
006 Deque (ocpjp v8 2 1133) (65.92 MB)
007 Maps (ocpjp v8 2 1380) (6.99 MB)
008 Deque (ocpjp v8 2 1131) (20.2 MB)
009 HashSet (ocpjp v8 2 1585) (7.49 MB)
010 Generic classes (ocpjp v8 2 1110) (14.76 MB)
011 HashSet (ocpjp v8 2 1513) (6.95 MB)
012 Collection API (ocpjp v8 2 1309) (70.31 MB)
013 Deque (ocpjp v8 2 1148) (30.49 MB)
014 ComparableComparator (ocpjp v8 2 1725) (25.2 MB)
015 Generic classes (ocpjp v8 2 1232) (10.71 MB)
016 Generic marker for ArrayList and Add() must match - ocpjp v11 2 1305 (2.85 MB)
001 Predicate (with code) - ocpjp v8 2 1784 (58.28 MB)
002 forEach(Consumer) operation (with code) - ocpjp v8 2 1801 (31.42 MB)
003 flatMap(Function) with diagrams and code - ocpjp v8 2 1886 (24.43 MB)
004 forEach(Consumer) using Immutable types (with diagrams) - ocpjp v8 2 1819 (39.63 MB)
005 IntFunction - ocpjp v8 2 1876 (5.81 MB)
006 Functional Interfaces (with code) - ocpjp v8 2 1863 (23.8 MB)
007 Method References in code - ocpjp v8 2 1800 (25.75 MB)
008 Lambdas relationship with Functional Interfaces - ocpjp v8 2 1806 (7.16 MB)
009 max() and reduce() operations (with code) - ocpjp v8 2 1793 (49.6 MB)
010 Lambdas relationship with Functional Interfaces (with code) - ocpjp v8 2 1807 (22.6 MB)
011 DoubleSupplier (with code) - ocpjp v8 2 1813 (38.16 MB)
012 Supplier's get() - with code - ocpjp v11 2 1814 (8.65 MB)
013 Function and Consumer - ocpjp v11 2 1817 (4.57 MB)
014 forEach(Consumer) - ocpjp v11 2 1818 (2.23 MB)
015 ToDoubleFunction - in API - ocpjp v11 2 3340 (17.02 MB)
016 Composing Consumers using andThen() - ocpjp v11 2 3339 (15.35 MB)
017 Function - with code examples - ocpjp v11 2 3319 (26.7 MB)
018 Defining the lambda is separate to executing it - ocpjp v11 2 3070 (5.2 MB)
001 IntStream average() method (with code) - ocpjp v8 2 2023 (19.92 MB)
002 sorted() and sorted(Comparator) with code - ocpjp v8 2 1762 (41.4 MB)
003 Downstream collectors (with code) - ocpjp v8 2 1804 (71.15 MB)
004 flatMap() with code and diagrams - ocpjp v8 2 1787 (110.82 MB)
005 Reductions (with code) - ocpjp v8 2 1738 (80.48 MB)
006 Optionals - ocpjp v8 2 1826 (27.49 MB)
007 Getting an average price (with code) - ocpjp v8 2 1809 (46.43 MB)
008 Collectors toMap() and BiConsumer (with code) - ocpjp v8 2 1846 (37.84 MB)
009 Collectors toMap() with code - ocpjp v8 2 1847 (19.58 MB)
010 An example where orElse() is useful (with code) - ocpjp v8 2 1810 (18.54 MB)
011 Optional ofNullable() with code - ocpjp v8 2 1849 (34.35 MB)
012 Consumer with side effects, lambdasmethod refs (with code) - ocpjp v8 2 1858 (37.75 MB)
013 sum() versus average() on empty streams (with code) - ocpjp v8 2 2024 (23.18 MB)
014 anyMatch() and noneMatch() with code - ocpjp v8 2 1840 (36.93 MB)
015 Terminal op starts streams, IllegalStateException (with code) - ocpjp v8 2 1841 (41.42 MB)
016 Comparing average() and sum() - ocpjp v11 2 2022 (3.8 MB)
017 Streams max() method - ocpjp v11 2 1792 (25.13 MB)
001 Duration - ocpjp v8 2 1741 (41.83 MB)
002 Duration between two ZonedDateTime's (with code) - ocpjp v8 2 2018 (20.76 MB)
003 Duration and Period examples (with code) - ocpjp v8 2 1743 (22.16 MB)
004 Instant (with code) - ocpjp v8 2 1760 (72.24 MB)
005 Daylight Savings Time (with code) - ocpjp v8 2 1749 (23.78 MB)
001 ResourceBundle searching - ocpjp v8 2 1154 (14.24 MB)
002 RescourceBundle searching (with code) - ocpjp v8 2 1768 (65.01 MB)
003 ResourceBundle searching - (ocpjp v8 2 1165) (14.56 MB)
004 ResourceBundle searching - (ocpjp v8 2 1152) (9.84 MB)
005 ResourceBundle searching (with code) - ocpjp v8 2 1201) (21.05 MB)
001 start() versus run() - ocpjp v8 2 1475 (7.79 MB)
002 synchronization and locks - ocpjp v8 2 1755 (5.23 MB)
003 starting a thread properly - ocpjp v8 2 1456 (6.8 MB)
004 deadlock - ocpjp v8 2 1482 (9.78 MB)
005 Non-deterministic behaviour - ocpjp v8 2 1483 (6.44 MB)
006 start() calls run() automatically - ocpjp v8 2 1728 (16.13 MB)
007 synchronized block - ocpjp v8 2 1317 (7.42 MB)
008 No main() method - ocpjp v8 2 1092 (4.7 MB)
009 synchronized methods release locks if they complete abruptly - ocpjp v8 2 1423 (4.09 MB)
010 Calling run() instead of start() - ocpjp v8 2 1548 (4.79 MB)
001 ConcurrentMap (with code) - ocpjp v8 2 1101 (25.11 MB)
002 ReadWriteLock (with code) - ocpjp v8 2 1104 (23 MB)
003 ReadWriteLock - ocpjp v8 2 1106 (3.17 MB)
004 ThreadLocalRandom - ocpjp v8 2 1108 (22.57 MB)
005 RecursiveAction - ocpjp v8 2 1238 (6.28 MB)
006 RecursiveAction and compute() with code - ocpjp v8 2 1241 (68.82 MB)
007 ExecutorService - ocpjp v8 2 1124 (2.6 MB)
008 ForkJoin framework - ocpjp v8 2 1260 (6.18 MB)
009 ForkJoin framework - ocpjp v8 2 1258 (18.51 MB)
010 ReentrantLocks - with code - ocpjp v11 2 3362 (17.43 MB)
011 lock() and tryLock() - with code - ocpjp v11 2 2009 (3.43 MB)
012 Runnable versus Callable - ocpjp v11 2 3514 (15.74 MB)
013 Executors newSingleThreadExecutor() - ocpjp v11 2 1142 (4.83 MB)
014 Asynchronous use of CallableFuture (in code) - ocpjp v11 2 1146 (13.85 MB)
015 Implementing Callable properly - ocpjp v11 2 1144 (8.89 MB)
016 Protecting a collection with a ReadWriteLock (with code) - ocpjp v11 2 1138 (15.65 MB)
017 Callable versus Runnable - ocpjp v11 2 1136 (4.96 MB)
001 Serialization example with code - ocpjp v8 2 1701 (22.07 MB)
002 Path getName() - ocpjp v8 2 1572 (4.97 MB)
003 Path subpath() - ocpjp v8 2 1581 (6.57 MB)
004 Path relativize() - ocpjp v8 2 1584 (20.8 MB)
005 Path normalize() - ocpjp v8 2 1602 (2.99 MB)
006 Path resolve() and Path relativize() - ocpjp v8 2 1608 (9.09 MB)
007 Path getName() - ocpjp v8 2 1575 (4.12 MB)
008 Files move() and Files copy() - ocpjp v8 2 1524 (6.6 MB)
009 BufferedWriter's close() has an in-built flush() - ocpjp v11 2 1811 (5.59 MB)
010 System in - v11 2 3345 (13.45 MB)
011 System out - ocpjp v11 2 3346 (16.38 MB)
012 BufferedReader's readLine() - ocpjp v11 2 3348 (5.93 MB)
013 BufferedReader - ocpjp v11 2 1392 (23.3 MB)
014 BufferedReder's mark() and reset() - ocpjp v11 2 1737 (6.81 MB)
015 RandomAccessFile - ocpjp v11 2 1716 (22.74 MB)
016 RandomAccessFile's writeChars() - with code - ocpjp v11 2 1717 (8.27 MB)
017 InputStreamReader's skip() - with example - ocpjp v11 2 1794 (4.99 MB)
018 Default encoding versus UTF encoding - in a hex editor - ocpjp v11 2 1774 (14.98 MB)
001 LVTI with code - ocpjp v11 2 3072 (6.91 MB)
002 LVTI, sort() and removeIf() with code - ocpjp v11 2 3068 (42.29 MB)
003 LVTI and varargs - ocpjp v11 2 3060 (2.46 MB)
004 LVTI and arrays with code (javac better than editor) - ocpjp v11 2 3061 (80.77 MB)
005 LVTI - identify incorrect usage (with code) - ocpjp v11 2 3062 (14.37 MB)
006 LVTI - processing an ArrayList - ocpjp v11 2 3063 (8.21 MB)
007 LVTI - which code samples will compile (with code) - ocpjp v11 2 3064 (29.78 MB)
008 LVTI - scope issue - ocpjp v11 2 3231 (3.24 MB)
009 LVTI - identify the correctincorrect variable declarations - ocpjp v11 2 3220 (9.91 MB)
010 LVTI - spot the compiler errors - ocpjp v11 2 3058 (9.61 MB)
011 Short-circuit operators - ocpjp v11 2 948 (8.2 MB)
012 Operators, promotion and casting - ocpjp v11 2 1190 (4.44 MB)
013 substring() - ocpjp v11 2 968 (20.88 MB)
014 print(null) prints null - ocpjp v11 2 935 (11.13 MB)
015 Prepost increment and decrement operators - with whiteboard - ocpjp v11 2 3570 (5.41 MB)
016 Integer parseInt() and Double parseDouble() - ocpjp v11 2 3140 (9.94 MB)
001 Java OOA - how many (immutable) LocalDate objects (diagram) - ocpjp v11 2 3139 (16.83 MB)
002 Java OOA - ensuring constants are initialised (with code) - ocpjp v11 2 3464 (10.26 MB)
003 Implicit super() with access issues - ocpjp v11 2 1123 (6.06 MB)
004 Enumerations - with code - ocpjp v11 2 3350 (21.96 MB)
005 Garbage collection - with diagrams - ocpjp v11 2 919 (5.84 MB)
006 Inner classes - ocpjp v11 2 1327 (3.83 MB)
007 Inner versus nested classes syntax - with code - ocpjp v11 2 1233 (12.8 MB)
008 Diamond of Death - in the code - ocpjp v11 2 1072 (9.02 MB)
009 Order of Initialization - ocpjp v11 2 1170 (18.34 MB)
010 Method overloading - ocpjp v11 1 926 (3.08 MB)
011 Accessing a static field with a null reference - ocpjp v11 3 1486 (4.11 MB)
001 Call by value - passing an array to a method (with a diagram) - ocpjp v11 2 946 (10.22 MB)
002 Multi-dimensional arrays - with diagrams and code - ocpjp v11 2 987 (98.51 MB)
003 Arrays compare() and Arrays mismatch() - with code - ocpjp v11 2 3102 (35.33 MB)
004 Arrays compare() and Arrays mismatch() - ocpjp v11 2 3103 (7.04 MB)
005 Matrix - with diagram - ocpjp v11 2 2015 (23 MB)
006 Arrays compare() - ocpjp v11 2 3104 (4.79 MB)
007 Processing the command line arguments correctly - ocpjp v11 2 3576 (23.58 MB)
008 Maps are not backed by the data structures used to fill them - ocpjp v11 2 3106 (5.76 MB)
001 'finally' is always executed - ocpjp v11 2 964 (14.4 MB)
002 What happens is a dimension expression completes abruptly - ocpjp v11 2 959 (7.36 MB)
003 'finally' always executes, even if you 'return' - ocpjp v11 2 950 (9.27 MB)
004 Watch out for unreachable code - ocpjp v11 2 984 (23.5 MB)
005 Overriding methods cannot throw newextra checked exceptions - ocpjp v11 2 3109 (6.19 MB)
006 Inheritance in Exceptions - ocpjp v11 2 3355 (9.24 MB)
007 Inheritance in Exceptions - with code - ocpjp v11 2 3356 (14.63 MB)
008 try-with-resources and AutoCloseable - ocpjp v11 2 3357 (3.52 MB)
009 'finally' return value replacing exception handler value - ocpjp v11 2 3595 (5.23 MB)
010 try-with-resources versus old-style try-catch-finally - ocpjp v11 2 3141 (9.71 MB)
011 If an arg expr completes abruptly, to the right is not evaluated - v11 2 1102 (3.6 MB)
001 Controlling Program Flow - loops and a 2D array, with diagram - ocpjp v11 2 3569 (19.7 MB)
002 A switch example - ocpjp v11 2 991 (3.25 MB)
003 A tricky 'if' statement - ocpjp v11 2 1111 (4.22 MB)
001 Immutable Classes and Call By Value (67.42 MB)
002 Advanced Encapsulation (defensive copying) (102.88 MB)
003 From UML to code (1 of 3) - Interpreting the UML (taken from my Java 8 course) (11.57 MB)
004 From UML to code (2 of 3) - the Instructions (taken from my Java 8 course) (3.15 MB)
005 From UML to code (3 of 3) - Solution (taken from my Java 8 course) (26.51 MB)
001 Bonus Lecture (23.66 MB)
[center]
Screenshot