GitHub - LichtImCode/easybytes-java: Java Programming: A Comprehensive Bootcamp from Zero to Hero

Description

Welcome to the course Mastering Modern Java Programming: Beginner to Pro, a comprehensive course designed to equip developers of all levels with the essential skills and knowledge to master Java programming from its fundamentals to advanced topics up to Java 25. Whether you're a beginner looking to kickstart your programming journey or an experienced developer seeking to enhance your Java expertise, this course has something valuable to offer.

Course Overview:

This course is meticulously crafted to cover every aspect of Java programming in-depth, ensuring a solid understanding of both the foundational concepts and the latest advancements in the language. Here's what you can expect to learn throughout the course:

Section 1: Let's Say Hello to Java

What is Java & why should you learn
Approach to learn Java language
Writing your first Java statement using jshell
Brief history of Java & it's release timeline
Why do we have different JDK vendors in Java ecosystem
Installation of Java

Section 2: Primitive data types in Java

Introduction to Java Keywords
Deep dive on byte, short, int, long, float, double data types
Syntax to declare primitive data types & store data using them
How to name a java variable
Case Styles in programming
Deep dive on boolean primitive data type
Deep dive on char primitive data type
Demo of Overflow and Underflow
[Java 7] Using underscore in numeric literals
Demo of octal number format in Java
Demo of hexa number format in Java
Demo of binary number format in Java
Type casting in Java
Demo of implicit and explicit casting
Introduction to String in Java
Demo of String in Java

Section 3: What happens behind the scenes when a Java program executes

Introduction to life cycle of a Java program
What is JDK, JRE, JVM
How Java became a platform independent language
Introduction to Java program code structure
Writing first Java class, compiling & running it
Introduction to IDE & IntelliJ IDEA
Create first Java project in IntelliJ & set up a theme
Writing first Java class in IntelliJ

Section 4: Deep dive on Java classes, methods, fields, constructors

Java supports Object-oriented programming (OOP)
Demo of creating a Java class
Declaring fields in a Java class
Demo of Java methods
Introduction to method signature
Purpose of a return statement in Java methods
Syntax of method invocation in Java
Let’s say hi to main method again
How to create & initialize Java objects
Introduction to Constructor in Java
Demo of Constructor in Java & introduction to debugging
Problem with default or no-args constructor
Constructor Overloading in Java
Constructor chaining in Java
Usage of return statement in constructor
Instance Initialization Block in Java class - Part 1
Instance Initialization Block in Java class - Part 2
Introduction to static variables in Java
How to define constant final static variables
Differences between static & instance variables
Introduction to static methods in Java
Static Initialization Block in Java class
Debugging of method invocations in IntelliJ
Where does Java store classes, objects, variables, methods
Deep dive on Heap memory and stack memory
Introduction to null in Java
Object Destruction and Garbage collection in Java
Class vs Object vs Instance vs Reference
What is encapsulation in Java

Section 5: Comments in Java

Single line Comments in Java
Multi line Comments in Java
Introduction to javadoc comments
Generating javadoc using IntelliJ

Section 6: Deep dive on String in Java

Introduction to String Pool in Java
The intern method in String
The concat method in String
Escape sequence character & Unicode char values in String
Finding the length of a String
Comparing Strings in Java
Fetching a character at an index in String
Checking if a String is empty
Changing the case in String
Converting values as String
Searching for a value in String
Trimming a String
Fetching Substring from a String
Replacing a part of a String
Splitting Strings
[JAVA 8] Joining Strings
The format() method in String
System.out.printf() method
Understanding how String objects are immutable
How to create mutable strings in Java
[JAVA 15] Text Block in Java
Converting String to primitive data type values
Convert String to double data type

Section 7: Operators in Java

Introduction to Operators & Operands in Java
Assignment Operator in Java
Introduction to Arithmetic Operators in Java
Addition Operator in Java
String Concatenation Operator
Division Operator in Java
Modulus Operator in Java
Unary plus and minus operators
Compound Arithmetic Assignment Operators in Java
Increment and Decrement operators in Java
Introduction to Relational Operators in Java
Equality Operator in Java
Inequality Operator in Java
Greater than, Greater than or equal, Less than, Less than or equal operators
Introduction to Logical Operators in Java
Logical NOT operator in Java
Logical Short-Circuit AND, Logical AND operators in Java
Logical Short-Circuit OR, Logical OR operators in Java
Logical XOR operator in Java
Compound Logical Assignment Operators in Java
Bitwise Operators in Java
Bitwise NOT operator or 1’s complement in Java
Bitwise AND operator in Java
Bitwise OR operator in Java
Bitwise XOR operator in Java
Left Shift operator in Java
Signed Right Shift operator in Java
Unsigned Right Shift operator in Java
Compound assignment bitwise operators in Java
Ternary or Conditional operator in Java
Details of Java operators Precedence & Associativity   

Section 8: Control flow statements in Java

Introduction to Control flow statements in Java
Deep dive on if, else if, else statements in Java
Nested if- else if - else statements
Ternary operator in the place of if-else statement
Deep dive on switch case statement
[JAVA 14] Deep dive on switch expression
Deep dive on while statement
Deep dive on do while statement
Deep dive on for loop
Deep dive on nested for loops
break statement
continue statement
return statement
Local variables & Scope

Section 9: packages in Java

Introduction to packages & benefits of them
Creating a package
Rules & standards to name a package
Using package members with import statement
The great java.lang package
The static import statements
Important points about packages & imports
Introduction to access modifiers
Demo of access modifiers for java classes
Demo of access modifiers for methods, fields in classes
Deep dive on POJO classes

Section 10: Inheritance in Java

Introduction to Inheritance in Java
Object class is the default Superclass
is-a & has-a relationships in Java
What a subclass inherits from its superclass
Introduction to upcasting in Java
Introduction to downcasting & it's demo
instanceof Operator
Static Binding and Dynamic Binding in Java
What is Polymorphism in Java
Method Overriding
super keyword to invoke super class methods from sub class
Method Overloading
Method overriding vs Method overloading
Method hiding in Java Inheritance
Field hiding in Java Inheritance
The story of constructors & Inheritance together
this and super keywords in Java
Types of Inheritance in Java
abstract methods and classes
final keyword in Java
[JAVA 17] sealed classes & interfaces

Section 11: Interfaces in Java

Introduction to Interfaces
Constant Field Declarations in interface
[JAVA 8] How to build default methods in interfaces
[JAVA 8] How to build static methods in interfaces
Multiple Inheritance using interfaces
Interface defines a new type
Marker Interface
[JAVA 8] Functional Interface
Class Vs Abstract Class Vs Interface

Section 12: Arrays in Java

What is a Array in Java
Declaring & initializing Arrays
Arrays length
Iterate elements of Array using for loop
Iterate elements of Array using for-each loop
Arrays advantages and disadvantages
Copying Arrays using loops
Copying Arrays using arraycopy and copyOf methods
Converting Arrays
Sorting Arrays
Searching an Array
Filling an Array
Introduction to multidimensional or nested arrays
Two-Dimensional or 2D Arrays
Jagged Arrays
Three-Dimensional or 3D Arrays

Section 13: Accept input using BufferedReader and Scanner

Understanding System.out.println
Introduction to BufferedReader & Demo
Introduction to Scanner & Demo
Comparison of BufferedReader and Scanner
Don’t use System.out.println in Production code
Logging in Java

Section 14: Exception handling using try, catch and finally

Taste of first Exception
try-catch block
multiple catch blocks
finally block
[JAVA 7] try- with-resources statement
Rules while handling exceptions
The Exception Hierarchy
Checked Exceptions
Unchecked Exceptions
throws keyword
throw keyword
Differences between throw and throws keyword
Exception Propagation
Nested try block
Custom Checked Exception
Custom Unchecked Exception
final, finally and finalize

Section 15: Unmasking Java's Superclass(java.lang.Object) Secrets

Introduction to the methods in Object class
Deep dive on getClass() in Object class
Deep dive on hashCode() in Object class
Deep dive on equals() in Object class
Override hashCode() & equals() methods
Override hashCode() & equals() methods using IntelliJ
Deep dive on toString() in Object class
Demo of hashCode(), equals() & toString() methods of String
Deep dive on finalize() in Object class
Deep dive on clone() in Object class
Details about Shallow cloning & Deep cloning
Mutable and Immutable objects
[JAVA 16] Record classes
[JAVA 10] var (local variable type inference)

Section 16: Introduction to Collections & Wrapper Classes

Arrays have limitations
What are Collections & why they accept only objects
Introduction to Wrapper Classes
Convert Primitive Type to Wrapper Objects (Boxing)
Convert Wrapper Objects into Primitive Types (Unboxing)
Autoboxing and unboxing
Caching with valueOf() methods
Java Collection Framework Hierarchy

Section 17: Lists and ArrayLists Unleashed – A Hilarious Journey through Data Structures

Deep dive on the Collection Interface
[JAVA 21] Deep dive on the Sequenced Collections
Deep dive on the List Interface
How to create objects of ArrayList
Demo of ArrayList
[JAVA 7] Diamond Operator in Java
ArrayList performance
[JAVA 9] Creating Immutable Lists
Iterate ArrayList using for-each and iterator()
Iterate ArrayList using listIterator()
Sorting ArrayList using sort() methods
Sorting ArrayList using custom Comparator
Sorting ArrayList of custom data type using Comparable
Sorting ArrayList of custom data type using Comparator
Arrays vs ArrayList

Section 18: LinkedLists - Java's Dance of Nodes

Introduction of LinkedList
How to create objects of LinkedList
Demo of LinkedList
Iterate LinkedList elements
Sorting LinkedList elements
LinkedList performance
ArrayList vs LinkedList

Section 19: Generics in Java

Introduction to Generics in Java
Why we need Generics in Java
Generic class in Java
Generics methods in Java
Collections with out Generics
Covariance Demo
Subtype or Upper Bound Wildcards
Supertype or Lower Bound Wildcards
Unbounded Wildcards

Section 20: Deep dive on Map, HashMap, TreeMap, LinkedHashMap

Introduction to Map in Java
Demo of HashMap
How HashMap Store Key, Value
How HashMap retrieve Value
[JAVA 8] HashMap improvements in Java 8
Iterating HashMap using keySet() and entrySet()
Iterating HashMap using values()
Introduction to TreeMap in Java
Demo of TreeMap in Java
Demo of LinkedHashMap in Java
[JAVA 9] Creating Immutable Maps

Section 21: Set, HashSet, TreeSet, LinkedHashSet

Introduction to Set in Java
Demo of HashSet
How HashSet works internally
Iterating HashSet
Set operations
Demo of TreeSet in Java
Demo of LinkedHashSet in Java
[JAVA 9] Creating Immutable Sets
List vs Set

Section 22: Enums in Java

Introduction to Enums
Problems with normal Java class constants approach
Demo of Enum approach
Associating Data to Enum Constants
Demo of EnumSet and it's important methods
Advantages of Enums

Section 23: Date and Time in Java

How Java supports Date and Time
Why a new Date API introduced in Java 8
Demo of java util Date
Date formatting and parsing using SimpleDateFormat
Demo of java sql Date
Demo of java util Calendar
TimeZone specific Date and Time
[JAVA 8] Introduction to new Date & Time API from Java 8
[JAVA 8] The of() methods in java.time Date and Time API
[JAVA 8] The from() & withXxx() methods in java.time Date and Time API
[JAVA 8] The toXxx() & atXxx() methods in java.time Date and Time API
[JAVA 8} The getXxx(), plusXxx() and minusXxx() methods in new Date & Time API
[JAVA 8] Introduction to Instant and Duration in java.time Date and Time API
[JAVA 8] Demo of Instant and Duration in java.time Date and Time API
[JAVA 8] Period in java.time Date and Time API
[JAVA 8] The multipliedBy(), dividedBy() & negated() methods
[JAVA 8] The truncatedTo() method
[JAVA 8] Demo of ZoneId, ZonedDateTime
[JAVA 8] Demo of ZoneOffset
[JAVA 8] Demo of OffsetDateTime and OffsetTime
[JAVA 8] Demo of Day Light Saving with ZonedDateTime
[JAVA 8] Non-ISO Calendars in java.time Date and Time API
[JAVA 8] Formatting Dates and Times using DateTimeFormatter
[JAVA 8] Parsing Dates and Times using DateTimeFormatter

Section 24: [JAVA 8] Functional Programming using lambda expressions

Introduction to Functional Programming
Imperative style vs functional style programming
What are lambda expressions and their syntax
How to build Lambda expressions
Deep dive on Functional Interfaces
How Functional Interface & Lambda expressions are linked
Anonymous inner class in the place of lambda expressions
Predefined Functional interfaces inside JDK
Deep dive on Predicate functional interface
Deep dive on Function functional interface
Deep dive on UnaryOperator interface
Deep dive on Consumer interface
Deep dive on Supplier interface
Deep dive on BiFunctional Interfaces
Primitive Type functional interfaces
Deep dive on Lexical Scoping of Lambda expressions
this and super inside lambda expression

Section 25: [JAVA 8] Building Lambda expressions using Method References

Introduction to Method References
Demo of Static Method Reference
Demo of Instance Method Reference
Demo of Instance method Reference using Class type
Demo of Constructor Reference

Section 26: [JAVA 8] Streams API

Introduction to java util stream API
Creating a Stream from collections
Streams have no storage
Introduction to Streams Pipeline
Demo of Streams map() method
Demo of Streams flatMap() method
Demo of Streams filter() method
Demo of Streams limit() method
Demo of Streams skip() method
Streams are traversable only once
Introduction to Streams reduce() method
Demo of Streams reduce() method
Demo of Streams collect() method
Demo of Streams collectingAndThen() method
Demo of Streams groupingBy() and partitioningBy() method
Finding and Matching methods in Streams
Quick revision about stream pipeline
Deep dive on parallel streams and demo
Collections Vs Streams

Section 27: [JAVA 8] Optional to deal with nulls in Java

Introduction to Optional class
Demo of Optional
Demo of ifPresent, ifPresentOrElse, orElse, orElseGet methods
Demo of orElseThrow, map, filter methods
Quick tip to filter null elements with Stream API

Section 28: MultiThreading in Java

What is MultiThreading
How a program or a software executes inside a computer
Parallel vs Concurrent Execution
How multiple threads improve performance
Creating Threads in Java
MultiThreading Demo Program
Demo of Thread methods getId, threadId, getName, setName, currentThread, sleep
Demo of Thread method join, getPriority, setPriority
Demo of wait(), notify(), notifyAll()
Introduction to Race condition & synchronized keyword
Demo of synchronized methods and blocks
Introduction & Demo of volatile keyword
Introduction to Deadlock
Demo Deadlock & possible fixes
[JAVA 21] Introduction to Virtual Threads

Section 29 - New features from Java 22, Java 23 and Java 24

Launch Multi-File Source-Code Programs
Unnamed Variables & Patterns
Markdown Documentation Comments
Stream Gatherers API

Section 30 - New features from Java 25

Module Import Declarations
Compact Source Files and Instance Main Methods
Flexible Constructor Bodies
Scoped Values
Performance improvements using AOT

Throughout the course, you'll engage in hands-on coding exercises, assignments, and projects to reinforce your learning and apply the concepts in real-world scenarios. Our experienced instructors will provide guidance, support, and insights to help you navigate the intricacies of Java programming effectively.

Whether you aspire to become a Java developer, enhance your career prospects, or simply gain a deeper understanding of one of the most widely-used programming languages, this course will empower you to achieve your goals in the world of Java programming.

Prerequisites:

  • No prior programming experience required, but familiarity with basic programming concepts will be beneficial.
  • A computer with internet access and a willingness to learn and practice.

Target Audience:

  • Beginners aspiring to learn Java programming.
  • Experienced developers looking to expand their Java skills.
  • Students and professionals seeking to advance their careers in software development.

Enroll now and embark on a journey to master Java programming comprehensively, from the basics to Java 24 and beyond! Für wen eignet sich dieser Kurs:

Beginners aspiring to learn Java programming.
Experienced developers looking to expand their Java skills
Students and professionals seeking to advance their careers in software development

Topics covered in the course

  • Section 1: Let's Say Hello to Java
  • Section 2: Primitive data types in Java
  • Section 3: What happens behind the scenes when a Java program executes
  • Section 4: Deep dive on Java classes, methods, fields, constructors
  • Section 5: Comments in Java
  • Section 6: Deep dive on String in Java
  • Section 7: Operators in Java
  • Section 8: Control flow statements in Java
  • Section 9: packages in Java
  • Section 10: Inheritance in Java
  • Section 11: Interfaces in Java
  • Section 12: Arrays in Java
  • Section 13: Accept input using BufferedReader and Scanner
  • Section 14: Exception handling using try, catch and finally
  • Section 15: Unmasking Java's Superclass(java.lang.Object) Secrets
  • Section 16: Introduction to Collections & Wrapper Classes
  • Section 17: Lists and ArrayLists Unleashed – A Hilarious Journey through Data Structures
  • Section 18: LinkedLists - Java's Dance of Nodes
  • Section 19: Generics in Java
  • Section 20: Deep dive on Map, HashMap, TreeMap, LinkedHashMap
  • Section 21: Set, HashSet, TreeSet, LinkedHashSet
  • Section 22: Enums in Java
  • Section 23: Date and Time in Java
  • Section 24: [JAVA 8] Functional Programming using lambda expressions
  • Section 25: [JAVA 8] Building Lambda expressions using Method References
  • Section 26: [JAVA 8] Streams API
  • Section 27: [JAVA 8] Optional to deal with nulls in Java
  • Section 28: MultiThreading in Java
  • Section 29: Java 22, 23 and 24 new features
  • Section 30: Java 25 new features

Important Links

Shortcuts