Course Outline
Introduction to Java
- History and evolution of Java
- Overview of Java versions and updates
- What’s new in Java 17
- Setting up Java Development Kit (JDK 17) and IDE
Java Program Structure
- Writing a simple Java program
- Java syntax overview
- Compiling and running Java applications
Data Types and Variables
- Primitive data types and wrapper classes
- Declaring variables and constants
- Type conversion and casting
Operators in Java
- Arithmetic, relational, logical, and bitwise operators
- Operator precedence and associativity
Control Flow Statements
- Conditional statements (if-else, switch)
- Looping constructs (for, while, do-while)
- Enhanced switch expressions (Java 17 feature)
Introduction to OOP Concepts
- Classes and Objects
- Encapsulation, Inheritance, Polymorphism, and Abstraction
Creating Classes and Objects
- Declaring and initializing objects
- The this keyword
- Constructors (default and parameterized)
Inheritance
- Extending classes (extends keyword)
- Method overriding and super keyword
- Abstract classes and methods
Polymorphism
- Compile-time vs. runtime polymorphism
- Method overloading and overriding
Interfaces
- Defining and implementing interfaces
- Functional interfaces and default methods
Record Classes (Java 17 feature)
- Understanding records in Java 17
- How records simplify data encapsulation
Generics in Java
- Understanding type parameters
- Generic classes, methods, and interfaces
- Bounded types and wildcards
Exception Handling
- Types of exceptions (checked and unchecked)
- Try-catch-finally blocks
- Throwing and catching exceptions
- Creating custom exceptions
Java Collections Framework
- List, Set, Map, and Queue interfaces
- Popular implementations: ArrayList, HashMap, HashSet
- Iterators and enhanced for loops
Lambda Expressions and Functional Programming
- Introduction to lambda expressions
- Syntax and usage
- Functional interfaces
Stream API
- Overview of Java Streams
- Stream operations (filtering, mapping, reducing)
- Parallel streams and performance considerations
Sealed Classes
- Defining and using sealed classes
- Permitted subclasses and restrictions
Pattern Matching for instanceof (Java 17 feature)
- Simplifying type checks with pattern matching
Text Blocks
- Working with multi-line text blocks in Java
- Comparison with traditional string handling
Records and Serialization Improvements
- Serialization and backward compatibility
- How records enhance code readability and maintenance
Deprecation and Removal of Features
- Deprecated APIs in Java 17
- Removal of outdated features
Switch Expression Enhancements
- Pattern matching in switch
- Using switch expressions for cleaner code
Foreign Function & Memory API (Incubator)
- Overview of the incubator module
- Working with native code in Java
Java Module System (Project Jigsaw)
- Introduction to modules in Java
- Creating and using modules
- Module descriptors and module-info.java
- Advantages of modularization
Concurrency and Multithreading
- Introduction to threads and multithreading
- Runnable interface and Callable interface
- Synchronization, locks, and thread safety
Asynchronous Programming with CompetableFuture
- Writing asynchronous code
- Using CompetableFuture for non-blocking operations
Deploying Java Applications
- Creating and executing JAR files
- Packaging and distributing Java applications
- Introduction to GraalVM (optional)
Best Practices and Code Optimization
- Writing efficient and maintainable Java code
- Common performance pitfalls and how to avoid them
- Code refactoring techniques
Summary and Next Steps
Requirements
- Basic knowledge in programming
Audience
- Software developers
- Programmers