
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.
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 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 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.
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.
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.
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 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 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.
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 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.
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 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 the string buffer in Java: a thread-safe, mutable sequence of characters, similar to the string builder, with safe use in multithreaded environments.
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.
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 bubble sort works by repeatedly swapping adjacent elements to move the largest values to the end, using a swap counter and inner/outer loops.
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.
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.
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.
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.