
Explore the Java programming language, developed by James Gosling and maintained by Oracle, and how Java bytecode runs on the Java Virtual Machine to achieve platform independence.
Install the JDK on a Mac by downloading Oracle Java, choosing arm64 or regular installer, completing default installation, and verifying the compiler with javac -version and java -version in Terminal.
Install the JDK on Windows, verify with java -version, and configure Java home and PATH environment variables to run Java from the terminal.
Windows users should follow the default installation steps.
Install the JDK, write Java programs in a text editor, create public class Main with main method, compile to bytecode, and run on the JVM to print hello world.
Explore the integrated development environment InTouch Community Edition for Java and learn project creation. Create a sample project with a com structure, write a main method, and run it.
Explore the hello world program by running a print statement, learn how packages and class naming relate to file names, and see how the main method starts execution.
Master Java's print and println, printing strings and numbers. Learn how print keeps output on same line, while println starts a new line; include empty print to insert a break.
Declare and work with variables in Java by specifying data types, assigning values, and reassigning as needed. Learn about strings, primitives, and declaring multiple variables in one statement.
Explain how to use Java comments to clarify code, choose appropriate comments, and employ // and /* */ styles for documenting classes, methods, and generating docs.
Understand string concatenation with the plus operator in Java, observe string immutability and reassignment to change values, and see that concatenating strings with other data types yields a string.
Explore Java's eight primitive types—byte, short, int, long, float, double, char, and boolean—and how their ranges, literals, and suffixes like l and f affect storage and value roles.
Explore identifiers in Java, including rules for naming variables, methods, classes, and interfaces; learn about case sensitivity, allowed characters, camelCase conventions, and meaningful naming practices.
Explore a Java program that uses variables, number of rows and columns, and math operators to compute total cells, demonstrates string concatenation and printing, and discusses local variable initialization.
Explore assignment compatibility among Java primitives, showing implicit widening from byte to int. See which conversions are automatic, and why int cannot directly become short.
Explore primitive type casting in java, from widening smaller types to bigger ones to explicit narrowing casts, understand truncation and range limits when converting between bytes, shorts, ints, and doubles.
Learn how Java arithmetic operators work on numeric data types, including integer division truncation, type promotion to the largest numeric type, and string concatenation with the plus operator.
Explore the remainder operator in Java, denoted by the percentage sign, and learn how division leaves a remainder through practical examples and determining even or odd numbers.
Explore IntelliJ shortcuts for Java development, including generating a main method by typing main and pressing enter, using main with control space, and creating print statements with out.
Explore how unary operators go first, then binary operators follow from left to right, with multiplication, division, and remainder taking precedence over plus and minus; use parentheses to override rules.
Explore Java compound assignment operators, updating primitive variables in place with short-hand forms like +=, *=, /=, and -=, and see old values become new values.
Explore how Java's increment and decrement operators work, including post and pre forms, and see how they affect variable values immediately or on next use.
compare primitives and objects in Java, noting that string is not primitive but an object, while primitives hold simple values and string is final class.
Learn to get input from the user in Java using get input methods that return strings, assign to variables, and replace hardcoded values with console prompts.
Create a change calculator that uses the remainder operator and integer division to convert user input into a numeric amount and output quarters, dimes, nickels, and pennies.
Convert string numerics to primitive numeric types using the wrapper parse methods, and perform math once converted. Learn handling short, int, long, float, and double, plus common number format exceptions.
Explore Java string methods such as length, which counts characters including spaces, toUpperCase, toLowerCase, and substring with one or two indices, and learn that strings are immutable.
Learn how indexOf and lastIndexOf in Java find string and characters, how charAt retrieves a character, how substring uses index results, and how replace can swap substrings, with out-of-bounds exceptions.
Explore string methods in Java, including equals and equals ignore case to compare values, contains, start with, and ends with for substring checks, and compareTo for alphabetical ordering.
Explore string methods in Java, including isEmpty, trim, join, and valueOf for converting values to strings. Learn Java 11 additions: isBlank, strip, and repeat for whitespace handling and repetition.
Explore conditional branching with if statements to classify names as long or short, and build a flooring calculator that computes price and applies a 5% discount when it exceeds 800.
Learn how Java comparison operators work, including equal to, not equal, and relational operators, with primitives and object references, plus range checks from user input.
Learn how to use logical operators: and, or, and not to connect boolean expressions in Java, with precedence, parentheses, range checks, and even/odd tests using the remainder operator.
Learn multi-branching in Java with if-else, input handling, and divisibility checks, emphasizing condition order and case-insensitive inputs, plus a 13.5 to 15.5 pressure range example.
Explore logical operators in Java, including single and, single or, their short-circuit behavior, and exclusive or, with attention to evaluation order and increments.
Learn how to use the ternary operator to assign values based on a condition, with examples showing true and false branches, boolean conditions, and type considerations.
Use the Java switch to map day-of-week numbers (0–6) to names with cases, breaks, and a default; learn types such as bytes and strings, and why doubles require if statements.
Explore advanced switch usage in Java, including char handling, case fall-through, default handling, and the Java 12 syntax for multi-labeled cases and switch expressions that return values.
Discover how to implement a while loop in Java to repeat code while a boolean condition stays true, using a counter to control iterations and exit on a correct input.
Explore infinite loops and how static utility methods power a course-wide helper class in Java, using while loops, thread.sleep, and counters to control or terminate execution.
Learn how the do-while loop differs from the while loop, executing at least once, with examples of loop bodies, conditions, and a password-check scenario including a maximum tries limit.
Demonstrate the Java for loop by detailing its initialization, condition, and update sections, compare it to while loops, and practice printing sequences 0 to 99 and 99 to 0.
Learn for loop and string concepts by printing each character of a user input word, using length and charAt, then reverse order and count vowels after converting to uppercase.
Explore how the loop control keywords continue and break work in Java, skipping iterations when numbers are divisible by seven and exiting the loop when a running sum exceeds 100.
Learn how a class acts as a blueprint for objects, how to create objects with the new keyword and their references, and how to access instance variables via dot notation.
Explore non-static instance methods in Java, including void methods like printFullName and value-returning methods like getFullName, with parameters and return statements used when calling object methods.
Demonstrate how static variables and static methods belong to the class rather than objects, accessed by class name, acting as global variables, with static final constants; illustrate with examples.
Demonstrate method overloading in Java by using the same method name with different argument counts or types, with examples like sum, print, and substring overloads.
Explore public, protected, default, and private access modifiers and how they govern access to variables and classes within same package, across packages, and in subclasses, including static and instance variables.
Explore how stack memory stores method frames and local variables while heap memory holds objects and arrays, and learn how the garbage collector automatically reclaims unused heap space.
Compare string and string builder, noting string builder's mutability for efficient in-place modifications. Master key operations like append, insert, delete, reverse, length, index, substring, and toString conversions with method chaining.
Explore the string buffer in Java: a thread-safe, mutable sequence of characters, similar to the string builder, with safe use in multithreaded environments.
Explore how wrapper classes represent primitives as objects in Java, enabling generics and collections. Learn common static methods like min, max, parse, and character utilities for digits and case checks.
Explore defining a Java enum for day-of-week constants, list all values with the values method, print them via for-each, and compare constants with equals, handling invalid inputs.
Explore how enums replace strings to enforce valid inputs, use switch and exceptions for defaults, and add constructors, properties, and methods to describe each constant.
Explore array traversal in Java by using traditional for loops and for-each loops to print elements, and compute sum and average from a temperature array.
Demonstrate how arrays use references to heap memory, show that multiple references can point to the same array, and explain copying or using Arrays.copyOf to create independent arrays.
Implement three array tasks in Java: find the smallest element in an array in linear time, find the largest element, and reverse an array in place using two pointers.
Explore converting a string to a char array and splitting a string into an array of strings by a delimiter; learn to access first and last elements.
Learn how selection sort finds the smallest value in the unsorted array, swaps it into the sorted portion, and repeats until the entire array is ordered.
Learn how bubble sort works by repeatedly swapping adjacent elements to move the largest values to the end, using a swap counter and inner/outer loops.
Learn how binary search finds a target in a sorted array by halving the search space with start, end, and middle, returning the index or -1 if not found.
demonstrate multidimensional arrays in java by creating a two-dimensional array of arrays, assigning values with i and j, and using nested loops to print elements and sum.
Discover varargs in Java by using a single method with int... numbers to sum any number of inputs, while supporting arrays and enforcing the last parameter rule.
Explore object oriented programming in Java, focusing on objects, classes, attributes, and methods while we examine encapsulation, abstraction, inheritance, and polymorphism, and how constructors and the new keyword create objects.
Demonstrate encapsulation by making fields private, providing public getters and setters, validating inputs with exceptions, and returning copies for mutable data, with examples from a person and a pizza.
Hide data by encapsulation, making fields private and exposing public getters and setters with filters, and return copies of mutable objects to prevent external code from altering originals.
Learn Java inheritance by extending person to student, access first name, last name, and age, add student id, and explore single inheritance, the diamond problem, and interfaces as a workaround.
Learn how inheritance lets child classes override parent methods to customize behavior, using the override annotation, and follow rules for method name, arguments, covariant return types, access modifiers, and exceptions.
Learn how to use the super keyword to access parent class properties and methods, differentiate this from current objects, and call parent constructors with arguments in Java.
Learn how Java objects inherit from the root object class, override toString, equals, and hashCode, and implement custom equality for the book class with practical examples.
Understand how visible properties are inherited in class hierarchy by examining car, BMW, and Audi, and see how public, protected, and default members are inherited while private members are not.
Apply the final keyword to variables, methods, and classes to create constants, prevent value changes, and stop overriding or inheritance in your code.
Explore how inheritance enables code reuse by letting a class extend a parent and inherit visible properties and methods, while noting single inheritance, interfaces, and the object superclass in Java.
Explore abstract classes in Java by defining abstract methods, enforcing contracts with concrete classes, and applying polymorphism to reuse tests across Audi and BMW implementations.
Analyze abstract classes, why they cannot be instantiated, how concrete classes implement abstract methods via overriding, and that abstract classes can include non abstract methods and inherited properties.
Explore how interfaces simulate abstraction alongside abstract classes, covering abstract methods, default and static methods, and the rules for public static final fields, implementation with implements keyword, and multiple interfaces.
Explore abstraction in Java using abstract classes and interfaces to define contracts that concrete classes must implement, enabling future changes and flexible use of multiple interfaces.
Explore polymorphism in Java by referencing Audi and BMW through a parent class or interface, and observe runtime polymorphism with overridden behavior. Understand how the reference type dictates available methods.
Explore polymorphism in Java by showing how a Car reference can point to Audi or BMW objects, and how runtime polymorphism applies when methods are overridden.
This course is ideal for gasp complex Java topics in a simple way. I tried to make it simple and just on point. It would be a perfect fit for people who want to put some of their prior knowledge of java or any modern programming language in a structured way, however, it is a perfect fit for beginners as well if students will practice coding challenges in CodingBat along with this course.
The course covers all main Java topics(except advanced topics). The flow of the course goes from basics concepts of programming that apply to any modern programming language and from the middle of the course I introduce more complex topics related to java and its features.
Why learn Java?
I think Java is a good programming language to start with because it is not as abstract as some languages so you will have some idea of what's going on behind the scene of high-level syntax. And at the same time, it is not a low-level programming language so you will not stack in the complex details. Additionally, it is one of the most popular programming languages and there are a lot of jobs for Java developers.
What version of Java will I learn in this course?
This course is based on Java 8, however, it describes all new features till Java 18.
Who is going to be my instructor?
My name is Bek and I'm OCA and OCP certified senior Java developer. I have been teaching Java for the last 3 years in a coding boot camp.