This course will take you on a journey of fundamentals of Java all the way through the bytecodes to the more advanced topics of programming.
Understanding and mastering Java programming will immediately put you in a good position for learning other languages such as C++ and Python.
The syntax of Java was designed to be similar to that of the C++ programs, hence if you are coming from the C++ world, then you are already halfway through mastering the Java language! Similarly, Python operates based on the assumption that every type is represented by an Object, hence closely resembles the philosophy that Java language follows.
This course is structured in a way to be very congruent with the official Oracle website for learning Java called dev dot java website. I will walk you through all the items discussed on dev dot java website and give very detailed examples of explanations.
One strong feature of this course is the frequent look under the hood in the bytecode of classes. Bytecodes are the compiled code that the java compiler "javac" provides, which sometimes reveal the hidden extra codes that javac adds to accomplish a task. For example, in the most recent version of JDK (java development kit), String concatenation always translates into creating a StringBuilder object behind the scene and calling its "append" method. Understanding such behind the scene concepts will enable you to truly master the Java language and write efficient codes.
The topics discussed in this course are:
Section 1: Getting Started with Java
In this section, I introduce the dev dot java website and discuss concepts such as "JAVA_HOME" and "CLASSPATH" environment variables. The concept of CLASSPATH will be discussed in more detail later in section 9 when I discuss the concept of java "packages".
Section 2: Primitives and Literals
This section is the absolute beginner's introduction to Java language features. Java language supports raw primitives and also provides wrapper classes (also called Boxed primitives). I discuss all of the supported primitives such as byte, short, int, long, float, double.
Section 3: Arrays
This section is dedicated to the built-in array construct in java. Java language allows primitive arrays and object arrays. An array can be directly initialized when it is declared. User-defined classes cannot extend built-in arrays.
Section 4: Local Variable Type Inference
This section is a brief introduction to the "var" identifier that was introduced in the recent versions of java. "var" allows the compiler to infer the type of local variables without the need for the developer to intervene.
Section 5: Operators in Java
This section introduces the core concept of operators that the java programming language supports. Math operators such as "addition +", "subtraction -", and "modulus %" are discussed in detail. The important concept of "operator overloading" is also discussed.
Section 6: Expressions and Statements
This section briefly presents a discussion on what constitutes an expression and a statement in java. Expressions are formed from operators and operands. Statements consist of one or more expressions and are always terminated by the semicolon ";".
Section 7: Control flow statements
This is an important section that discusses the control flow statements such as "if", "if else", "while" loop, "for" loop, "switch expression" and "switch statement". The behind the scene bytecode is also reviewed for each control flow construct.
Section 8: Intro to Object-Oriented Programming
This section is the introduction to the main concepts of object-oriented programming. Java language was developed with these concepts in mind and relies on the "inheritance", "abstraction", and "interfaces". Every "class" definition in java implicitly inherits from the "Object" class that exists inside the "java.lang" package. The idea of organizing the java project into packages and fully-qualified-name of the types is discussed in great detail.
Section 9: Classes and Objects
This section puts the general concepts of object-oriented programming in the context of Java programming (syntax) and the unique features that Java provides. We discuss how java handles inheritance, polymorphism, encapsulation, and the difference between the static and non-static states of objects.
Section 10: Advanced Topics on Classes and Objects
This section dives deeper into the features of classes and objects that Java programming provides.
Section 11: Introduction to Java Native Interface
This section is an introduction to the foreign function interface (FFI) that the java development kit provides. JNI is considered by some as a difficult topic and is rarely discussed in lectures and courses. This chapter assumes the student has some knowledge of C++ programming and how to compile ".cpp" and ".h" files.
Section 12: Introduction to Effective Java
This section introduces the most important book titled "Effective Java" that every java developer must have. Each lecture corresponds to an item of best practices of java programming that is discussed in the book.
Section 13: Miscellaneous Topics
This section provides additional insights about the java programming language or the tools that are directly or indirectly related to java programming. Tools such as GraalVM's native image and Jupyter notebooks are discussed.
41
131
TAKE THIS COURSE