Anatomy of Java Code
Your First Java Class
Statements Explained
What is the JVM?
How Java Works
Declaring Variables
Primitive Data Types
Non-Primitive Types
Type Conversion
Constants in Java
What are Literals?
ASCII vs. Unicode
Unicode in Java
Scope: Where are Vars Usable?
Declaring Variables
What are Methods?
Anatomy of a Method
Parameters: Input to Methods
Return Values: Output
Calling All Methods
Instance Methods
Static Methods
Instance vs. Static
Method Overloading: The Same Name
Overloading Examples
What is Recursion?
Recursive Examples
The Main Method
Command Line Arguments
Main Method Best Practices
What is OOP?
Classes and Objects
Anatomy of a Class
Your First Class
What are Constructors?
Default Constructor
Parameterized Constructor
What is Encapsulation?
Access Modifiers
Private Members
Getter Methods
Setter Methods
Benefits of Getters/Setters
Encapsulation Example
Real-World Encapsulation
What is Inheritance?
Parent and Child Classes
Why Use Inheritance?
Single Inheritance
Inheriting Fields
Inheriting Methods
Constructor Inheritance
What is Method Overriding?
Implementing Overriding
Accessing Overridden Methods
Overriding vs. Hiding
Using 'super' in Java
Calling Parent Constructor
When to Use 'super'
Inheritance in Action
What is Polymorphism?
Method Overloading
Method Overriding
Dynamic Method Dispatch
Polymorphism in Action
What is Abstraction?
Abstract Classes
Abstract Methods
Extending Abstract Classes
Abstract Class Example
What are Interfaces?
Creating Interfaces
Implementing Interfaces
Interface Inheritance
Interfaces Example
Collections: The Need
Collections Framework Intro
Collection Interface
Iterable Interface
Iterator Interface
List Interface
ArrayList Class
Set Interface
HashSet Class
Map Interface
HashMap Class
Iterating Lists
Iterating Sets
Iterating Maps
Collections Use Cases
Strings: The Basics
String Literals
String Concatenation
String Methods: Length
String Methods: charAt()
String Methods: equals()
String Methods: equalsIgnoreCase()
String Methods: contains()
String Methods: substring()
String Methods: startsWith()
StringBuffer Intro
StringBuffer Methods
StringBuilder Intro
StringBuilder Methods
StringBuffer vs Builder
Intro to Lists
ArrayList: Under the Hood
LinkedList: Under the Hood
ArrayList vs LinkedList
Choosing the Right List
Intro to Maps
HashMap: Under the Hood
Hashtable: The Original
TreeMap: Sorted Maps
HashMap vs Hashtable
HashMap vs TreeMap
Sorting with Collections
Comparable Interface
Comparator Interface
File I/O: The Basics
The File Class
Byte vs Char Streams
FileInputStream: Reading
FileOutputStream: Writing
Buffered Byte Streams
FileReader: Reading Text
FileWriter: Writing Text
Buffered Char Streams
Reading Text Files
Writing Text Files
CSV Files: Introduction
Reading CSV Files
Writing CSV Files
CSV Libraries
What is Serialization?
Serialization Use Cases
The Serializable Interface
Basic Serialization Example
ObjectOutputStream Class
What is Deserialization?
Basic Deserialization
ObjectInputStream Class
Handling ClassNotFound
Version Control
Transient Fields
Custom Serialization
Externalizable Interface
Security Considerations
Serialization Alternatives
What are Streams?
Creating Your First Stream
Stream Operations
Stream Pipelines
Parallel Streams
The 'filter' Operation
Filtering Strings
Filtering Numbers
Filtering Objects
The 'map' Operation
Mapping to Strings
Mapping to Numbers
Mapping to Objects
FlatMap
The 'reduce' Operation
Summing Numbers
Finding Min/Max
What is Multithreading?
Threads vs. Processes
Concurrency vs. Parallelism
Why Use Multithreading?
Multithreading Challenges
Thread States
New Thread State
Runnable Thread State
Running Thread State
Blocked/Waiting State
Terminated Thread State
Thread Class
Runnable Interface
Thread Priorities
Thread Naming
Intro to Synchronization
The 'synchronized' Keyword
Object-Level Locking
Class-Level Locking
Synchronization Gotchas
Wait and Notify Intro
Using wait()
Using notify()
Using notifyAll()
Spurious Wakeups
Deadlock Introduction
Deadlock Example
Preventing Deadlocks
Lock Ordering
Avoiding Deadlocks
Networking: What is it?
IP Addresses Explained
Ports: The Doorways
Sockets: Endpoints
Client-Server Model
TCP: Reliable Connection
UDP: Fast and Loose
TCP vs. UDP: Key Differences
Packet Switching
ServerSocket: Server-Side
Socket: Client-Side
Simple Client-Server App
Multi-Threaded Servers
Error Handling
Closing Connections