
Begin with the instructor's overview, outlining a full theoretical prep for the OCA and OCP exams, with chapter guidance, hands-on coding, and mock exams to sharpen exam-ready skills.
Explore the environment for Java development by identifying the JDK and JRE components, mastering commands javac, java, jar, and javadoc, and understanding cross-platform class bytecode.
Discover how class structure forms Java programs, linking blueprint and object through fields and methods. See a simple Student example with getters, setters, and basic comments.
Explore the Java main method and its public static void and String[] args signature, showing how programs start and how command-line arguments are processed.
Explore how Java packages organize classes as folders, how imports, fully qualified names, and wildcards enable usage, and how to create and structure custom packages for reliable code.
Master compiling, running, and archiving Java files, using the Java C compiler and the Java runtime, managing classpaths, output directories, and packaging into jar files for exam readiness.
Learn how Java objects are created with new and how constructors initialize instances. Understand the relationship between classes and objects, and the order of initialization from fields to constructors.
Explore Java data types, including boolean, byte, short, int, long, float, double, and char, along with wrapper classes and strings, covering default values, ranges, suffix rules, bases, and parsing.
Discover text blocks in Java 15, using triple-quoted delimiters and newlines, with guidance on incidental versus essential whitespace and concrete examples for the OCP exam.
Master Java variables, including declaration, initialization, and identifiers; follow naming conventions and rules for reserved words; manage scope across local, instance, and class variables, with final constants and default values.
Local variable type inference uses the var keyword to let the compiler infer a type from the assigned value, applies only to local variables, and the inferred type cannot change.
Learn how the Java garbage collector frees heap memory by removing objects no longer reachable. See why system.gc() is only a suggestion, not a guarantee, illustrated with a reference example.
Discover Java operators, including unary, binary, and the ternary operator, and see how precedence, parentheses, and the assignment operator shape expressions and outcomes.
Explore Java unary operators, including logical complement, bitwise complement, plus, minus, cast, and increment/decrement. Understand pre- and post-increment/decrement and how they return values with examples.
Explore Java arithmetic binary operators: addition, subtraction, multiplication, division, and modulo. Learn how numeric promotion promotes bytes, shorts, and chars to int, and how integer division and modulo influence results.
Master the assignment operator in Java, its lowest precedence, auto and explicit casting, compound forms, and the fact that assignment returns a value—watch exam tricks with if statements.
Learn how Java comparison operators return booleans, including equals and reference equality, relational operators, instanceof, and short-circuit behavior of logical and ternary operators.
Master flow control with if-else statements, boolean expressions, and optional else if and else blocks. See an example using a, b, c and a string s to show evaluation order.
Explore the switch statement in Java 8 syntax and its readability benefits over if-else. Learn break and default behavior, allowed types, and how grouping values works, with practical grid examples.
Master switch expressions in Java 17 for the OCP, using arrow syntax, yield, and block code to return values and enforce all cases, with enums example like compass.
Master the while loop syntax and boolean conditions, and apply break, continue, and return to control flow, including nested outer and inner loops.
Master the do-while loop in Java, learning that its body runs at least once, differs from a while loop, and supports break, continue, and nested patterns.
Understand the for loop in Java by comparing it with the while loop, mastering initialization, condition, and update, and using single or multiple indices with break, continue, and nested loops.
Explore the enhanced for loop, or for each loop, to iterate arrays and collections, print elements, and compare its simplicity with the traditional for loop, including Java 17 var inference.
Master strings and string methods in Java, including creation, concatenation rules, length, indexOf, substring, case conversion, equals, equalsIgnoreCase, trimming, replacing, and formatting.
Explore stringbuilder in Java, a mutable string helper with append, insert, delete, reverse. Learn how it differs from strings, and that substring does not mutate the builder.
Explore how the Java string pool stores literals in memory, how references reuse a single object, and how compile-time concatenation, runtime methods, intern, and new affect memory usage.
Explore how to declare and initialize arrays in Java, including various syntax forms, printing arrays, and understanding that arrays don't implement the equals method and have a length property.
Master sorting arrays with Arrays.sort, perform binary search on sorted arrays, and use Arrays.compare and Arrays.mismatch to compare and differentiate array contents.
Examine two dimensional arrays as arrays of arrays in Java, with zero-based indices and varying subarray lengths. Use nested for loops or for-each loops to access and print elements.
Learn Java time basics: create and use local date, local time, local date time, and zoned date time with factory methods and zone id, including time zone conversions.
Explore manipulating local dates, times, and local date time with plus and minus operations for days, weeks, months, years, hours, minutes, seconds, and nanoseconds, plus immutability and is before checks.
Master creating and using periods and durations to manipulate local date and local date time, local time, and instants, including additions and subtractions, with ChronoUnit and zone conversions.
Define Java methods with full syntax, including public or default access, final, void return type, method name and parameters, throws, and a body, ensuring correct keyword order.
Compare local and instance variables, covering scope, initialization, and default values. Explain final and effectively final, and outline access modifiers, plus how final references differ from mutable content.
Explore variable arguments (varargs) and learn that a method can have one varargs parameter, which must be last, enabling a method to accept multiple strings or a string array.
Learn how private, default, protected, and public access modifiers control member visibility in Java, with examples using dog and husky to illustrate access rules across classes and packages.
Learn how static members belong to the class rather than any instance, how static fields share state, how static methods are invoked, and how static blocks and imports initialize constants.
Explore boxing and unboxing in Java, converting primitives to wrapper classes and back, including explicit boxing, auto boxing, and unboxing, with implications for overload resolution.
Explain method overloading in Java, showing how same-name methods with different parameter lists are selected by exact matches, larger primitive types, autoboxing, and supertypes, with varargs caveats.
Explore how inheritance allows a subclass to inherit members from a superclass, illustrated by dog and mammal, and note that interfaces can be implemented and every class extends object.
Explore creating classes with private and protected fields, using public getters and setters to encapsulate data. Learn inheritance with mammal and dog, and employ this and super for field access.
Define constructors as special methods called during object creation, matching the class name and lacking a return type. Explore overloading, default constructors, and private constructors with practical examples.
Learn how to use this and super in Java constructors to call other constructors or superclass constructors, and master the rules to avoid cycles and compile errors.
Explore the order of initialization in Java, showing how superclass initialization, static fields, and static initializers run once, followed by instance variables, initializers, and constructors.
Explore inheriting members by subclassing methods and fields, overriding with the same signature, covariant return types, and polymorphism, plus using super and hidden versus overridden behavior.
Explore abstract classes by extending mammal into concrete dogs and cats and implementing the speak method. Learn that abstract methods must be overridden and that abstract classes cannot be initialized.
Explore interfaces in Java and how they compare to abstract classes, detailing implementation with implements, multiple interfaces, and default, static, and private interface methods.
This course is designed to give you full theoretical preparation to get you certified in Java.
In one single course you will find all you need in order to pass Oracle exams and get following certifications:
Oracle Certified Associate, Java SE 8 Programmer (1Z0-808 exam)
Oracle Certified Professional: Java SE 17 Developer (1Z0-829 exam)
Oracle Certified Professional: Java SE 21 Developer (1Z0-830 exam)
IMPORTANT! Since Oracle released Java SE 21 Developer exam, I highly recommend my students to take 1Z0-830, rather than 1Z0-830. The preparation is almost identical, but you'll get 30 minutes more on your exam and you'll be certified in latest LTS technology.
If you are a candidate for the OCA of Foundations exam, you should only watch the lessons which are marked with [OCA], and if you are aspiring to get the OCP certificate, you should watch all lessons.
After you complete the course, you should practice and test your knowledge and problem solving skills with mock exams. My personal recommendation is to use Enthuware, but there are plenty of other resources out there as well.
This course will cover following topics:
Building Blocks of Java program [OCA]
Operators [OCA]
Flow Control [OCA]
Strings [OCA]
Arrays [OCA]
Date and Time [OCA]
Methods [OCA]
Class Design [OCA]
Abstract Classes & Interfaces [OCA]
Lambdas & Functional Programming [OCA]
Collections [OCA]
Exceptions [OCA]
Math APIs [OCP]
Beyond Classes [OCP]
Streams [OCP]
Localization [OCP]
Modules [OCP]
Concurrency [OCP]
I/O [OCP]
JDBC [OCP]
Get Certified for Java SE 21
All presentation materials are available for download as PDF files!
I strongly encourage you to try out all the examples given in the course, and also to play around with the code to further explore the possibilities coding in Java. You can do this on your local computer by downloading JDK 8 (for OCA candidates) or JDK 17 or JDK 21 (for OCP candidates) from Oracle or OpenJDK and using your favorite IDE. I recommend IntelliJ, but Eclipse or NetBeans will do the job as well.
Even quicker option is to use online compilers. My favorites are JDoodle and OneCompiler. This is the fastest way to try out small pieces of code.
My name is Luka Popov and I’ll be your instructor for this course. I am fully certified Java Developer (Oracle Certified Associate: Java SE 8 Programmer, Oracle Certified Professional: Java SE 17 Developer), with PhD in theoretical physics. I have 10+ years of teaching experience on university level, and 5+ years as a professional software developer. Currently I work as a senior Java developer in a telecom company.
Have a nice learning and don’t hesitate to contact me if you have any further questions.