
Set up your java project in the IDE and explore the basic project structure. Create a main class with public static void main and print hello world to the console.
Understand Java data types by separating primitive types on the stack from non primitive objects on the heap, including boolean, char, int, long, float, double, and string.
Discover how strings work in Java, including memory concepts like stack, heap, and the string pool. Learn to declare, concatenate, and compare strings using equals and related methods.
Demonstrates strings in Java by splitting comma separated values into an array, using length and charAt, changing case with toUpperCase and toLowerCase, and comparing immutable strings with StringBuffer and StringBuilder.
Explore how arrays work in java, including primitive and non-primitive types, declaring and initializing arrays, indexing from zero, and using length and exceptions. Learn through debugging and static array declarations.
Explore multidimensional arrays, from two-dimensional matrices to three dimensions, and how memory layout uses heap and stack with pointers. Learn initialization and element access.
Explore Java functions by defining public and static methods, returning values or void, using parameters, and organizing code with classes and objects to improve readability and reuse.
Learn how to use Java operators, including prefix and postfix increment, logical, arithmetic, relational, ternary, and assignment, while understanding precedence and common pitfalls.
Explore how to use the if statement in Java to model real-world decisions, compare values with relational operators, and combine conditions with boolean logic.
Explore how switch statements route input to specific outcomes using case, break, and default, and compare them with if statements through practical door and prize examples.
Explore how while and do while loops work in Java, using stairs and envelopes as models, with real-world examples of arrays, null checks, infinite loops, and practical flow control.
Demonstrates how the for loop works in Java, showing initialization, condition, and increment, and how to iterate arrays, compute sums, count appearances, and use enhanced for loops with null checks.
Explore object oriented programming by modeling real world concepts as classes with attributes and methods, using a dog class to create Rex, Ben, and Bruno and a static counter.
Model real world systems in Java by designing classes for a football team, including players, stadium, coach, owner, supporters, and matches, with relationships and simple methods.
Define and relate football entities in a Java package by creating Player, Coach, Owner, Stadium, Supporter, and Match classes, then assemble a team with attributes, relationships, and matches.
Build an online shop in java by modeling entities like basket, item, user, order, return, voucher, warranty, and review, defining their relationships, and creating objects in main.
Transform basket items into an order, apply vouchers, and explore adding and removing items, price calculation, and order history in an online shop model.
Explore constructors in Java, including default and no-argument constructors, and overloaded argument constructors. Learn to use this to assign parameters to attributes and track object creation with a static counter.
Refactor code by adding parameterized constructors for the airport example, replacing default constructors, and using this to assign parameters to fields, ensuring consistent naming and correct parameter order.
Explore robust constructor design in Java by modeling a football team and an online shop, defining parameterized constructors for coaches, players, stadiums, owners, matches, reviewers, items, baskets, and more.
Explore how every class inherits from the object class, and implement equals and hashCode to define object equality, while overriding toString and other essential object methods in Java.
Explore casting, boxing, and unboxing in java, including primitive and wrapper types. Introduce exceptions and null handling, and use instanceof checks to safely downcast.
Learn getters and setters in Java and how access modifiers—public, private, and default—shape visibility. See how encapsulation uses getters and setters to safely access private attributes via a dog example.
In this Java course lecture, learn to implement getters and setters across airport, football team, and online shop classes, enforce private fields, validation, and read-only access.
Explore interfaces as contracts and blueprints that enable volatile, changeable components without breaking the whole app; see how dog interface implementations like apartment dog illustrate casting and runtime method selection.
Learn how to use interfaces in java by modeling planes, pilots, and coaches; implement multiple types, expose details via interface methods, and apply tactics and training through football team interfaces.
Explore how to add interfaces to an online shop by implementing warranty and voucher interfaces for expensive and normal products, company and normal users.
Explore superclass and subclass relationships, and learn how abstract classes enable reusable code, inheritance and interfaces in Java, including constructors, access modifiers, and abstract methods.
Learn how abstract classes consolidate common code across projects, airports, football teams, and online shops, by creating abstract planes, players, warranties, and users, then extending them to reduce duplication.
Explore the four access modifiers—public, private, protected, and default—and see how they govern visibility in a class and its package, with getters and setters demonstrating access.
Explore the difference between overriding and overloading in Java, including how constructors can be overloaded and how the compiler selects the correct method by parameter types.
Implement a real-world foundation of three animal shelters across the program, with employees, animals, and adopters, and explore interfaces, abstract classes, inheritance, and polymorphism through save and adopt operations.
Learn how to read keyboard input using Java streams and buffers, distinguish binary and text files, and understand buffering with input/output streams, readers, and writers, with a simple keyboard-to-console example.
Explore how input stream reader reads a file character by character from a file input stream, using ASCII codes and a while loop until end-of-file (-1), with debugging tips.
Compare file reader and input stream reader, showing how to read characters from a file in java, using a main class with try-catch, printing until -1, and closing the reader.
Explore how BufferedReader wraps input stream or file readers to leverage buffering for efficient line-by-line reading, with examples of readLine and proper closing.
Learn how to create and write an xml file from a java program, including document building, root and child elements, attributes, comments, and transforming to a saved file.
Master reading XML files in Java using the document builder factory and document, then normalize the document to access elements, attributes, and text content by tag names.
Learn to write a json file in java using json-simple by building a root object with a category and a dogs array and writing it to disk.
Read a json file in Java by using a json reader to parse the structure, print the category, and print each dog's name and age from the dogs array.
Learn how to store, structure, and retrieve data with sql in relational databases, using primary keys, foreign keys, and table relationships to ensure data integrity in mysql.
Design a database schema for an animal shelter using my sql workbench, linking volunteers, dogs, adoptions, possible adopters, and personality traits through a many-to-many bridge table.
Create a relational database schema with data definition language, defining tables such as shelters, volunteers, dogs, breeds, personality traits, adopters, and adoptions using primary keys, foreign keys, and constraints.
populate the database by inserting shelters, volunteers, personality traits, breeds, and dogs, then manage adoptions with transactions, commits, and foreign keys via the command line.
Solves database exercises by writing sql queries to show adopted dogs and their adopters, using joins, aliases, group by, and like across dogs, adoptions, and adopters.
learn how to use gbk (jdbc) to connect to a mysql database, run select and insert operations with statements and result sets, and manage resources and exceptions.
Master big O concepts, time and space complexity, and cases like best, worst, and expected; compare constant, linear, and quadratic runtimes with recursion, divide-and-conquer, and binary search examples.
Explore how linked lists differ from resizable arrays, compare advantages and disadvantages, and demonstrate core operations like inserting at beginning, end, after a node, and deleting nodes.
Explore stacks and queues in Java, learning their last-in, first-out and first-in, first-out behavior, with core operations like push, pop, pick, add, remove, and isEmpty.
Learn how a resizable array starts with a default capacity, doubles when full, and allocates a new array, copying old elements to enable amortized efficient insertions.
Explore how hash tables use a key and hash function to map to an array index, handle collisions with linked lists, and support add and retrieve operations.
Explore binary search trees and binary trees, implement insertion and recursive search, and learn in-order, pre-order, and post-order traversals, plus concepts like balanced, complete, full, and perfect trees.
Explore max heap and min heap structures, implemented as arrays, with complete binary tree properties, including insert, extract max, heapify operations, and heap sort.
Introduces multithreading in Java, explains threads, processes, cores, and context switching; demonstrates running code with the Runnable interface and extending Thread, comparing start vs run and highlighting synchronization challenges.
Explore Java multithreading by implementing parallel sum of array quarters, coordinating threads with join, measuring performance, and understanding when to use threads vs sequential execution.
Explore how to synchronize a function or block in java with the synchronized keyword, guarding a shared sum across threads and preventing race conditions.
Learn to refactor parallel sums of elements using synchronized and lists, then implement futures and executor service with callables to run asynchronous tasks in a fixed thread pool.
Synchronize multiple threads with a countdown latch, letting the main thread wait for worker tasks to finish using delays and the Java concurrent countdown latch.
Explore reentrant locks in Java, using lock, tryLock, and unlock to manage reentrant access with optional fairness, counting lock holds, and comparing lock versus tryLock in multi-thread scenarios.
Learn how a semaphore controls access to shared resources by acquiring and releasing permits, demonstrated with a bank counter model and multiple threads.
Explore the Java fork/join framework introduced in Java 1.7, which speeds up processing with divide-and-conquer work stealing, using recursive action and recursive task to process video files.
Demonstrates a deadlock in java by showing two threads holding resource one and resource two while waiting for each other, creating an infinite block.
"Complete Java Course: Object-Oriented Programming, Data Structures, and Multithreading" is an in-depth and comprehensive program that is designed to take participants with little or no experience in Java programming to a level where they can create their own Java applications with confidence. The course covers the fundamental concepts of Object-Oriented Programming (OOP), which is the backbone of Java programming. It begins with an introduction to classes and objects, which are the building blocks of OOP. Then it delves into the concepts of inheritance, polymorphism, and encapsulation, which are key OOP principles that allow for code reuse and flexibility.
The course also covers the most important data structures such as arrays, lists, stacks, queues, and trees, and how to use them effectively in Java. Participants will learn how to select the appropriate data structure for a given problem, and how to implement and use it efficiently. Additionally, the course covers the concepts of multithreading, which allows for concurrent execution of multiple threads, making the applications more responsive and efficient. The course will cover the basics of threading, synchronization, and inter-thread communication, as well as advanced topics such as thread pooling and Executor framework.
Throughout the course, hands-on exercises and real-world examples will be used to help participants develop a solid understanding of the material. The course will also cover best practices, common pitfalls, and debugging techniques to help participants write clean, maintainable, and efficient code. By the end of the course, participants will have the necessary skills to create their own Java applications using OOP, data structures, and multithreading techniques. They will be able to design and implement complex programs, and will have a strong foundation for further learning and development in Java.
This course is suitable for anyone who wants to learn Java from scratch or improve their existing knowledge. It will be particularly beneficial for software developers, programmers, IT professionals and students who want to start a career in Java development or want to improve their skills in Java.