X 400561
Vrije Universiteit Amsterdam
2023
,Contents
1 Modifiers 4
1.1 Illustrative Example: . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Interfaces 6
2.1 What is an Interface? . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Implementing an Interface . . . . . . . . . . . . . . . . . . . . 6
2.3 Benefits and Usage . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Exceptions 8
3.1 What is an Exception? . . . . . . . . . . . . . . . . . . . . . . 8
3.1.1 Statement Groups and Semantics: . . . . . . . . . . . . 8
3.1.2 Example with Factorial Calculation: . . . . . . . . . . 8
3.2 Catching Exceptions: . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 Syntax for try-catch: . . . . . . . . . . . . . . . . . . . 9
3.3 Throwing Upwards: . . . . . . . . . . . . . . . . . . . . . . . . 9
3.4 Developer and User Errors: . . . . . . . . . . . . . . . . . . . . 9
4 Generic Types and ArrayList 10
4.1 Generic Types: . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2 ArrayList: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2.1 Key Methods: . . . . . . . . . . . . . . . . . . . . . . . 11
4.2.2 ArrayList with Primitive Types: . . . . . . . . . . . . . 11
5 Sets: 12
5.1 Definition: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2 Key Differences from ArrayLists: . . . . . . . . . . . . . . . . 12
5.3 Set Interface Methods: . . . . . . . . . . . . . . . . . . . . . . 12
5.4 Additional Notes: . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.5 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6 Linked Lists: 14
6.1 Definition: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.2 Key Points: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3 Inner Classes: . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.4 Additional Notes: . . . . . . . . . . . . . . . . . . . . . . . . . 14
1
,7 Maps: 16
7.1 Definition: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.2 Usage: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.3 Key Characteristics of Maps: . . . . . . . . . . . . . . . . . . . 16
7.4 Map Functionality: . . . . . . . . . . . . . . . . . . . . . . . . 16
7.5 Warnings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8 Inheritance: 18
8.1 Definition: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.2 Purpose: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.3 Key Concepts: . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.4 Example: Bikes . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.5 Super Keyword: . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.6 Key Takeaways: . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.7 Additional Insights: . . . . . . . . . . . . . . . . . . . . . . . . 19
8.8 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
9 Java Object & Cloneable 21
9.1 The Object Class: . . . . . . . . . . . . . . . . . . . . . . . . . 21
9.2 Key Insights: . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
9.3 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10 Enums (Enumerations) 22
10.1 Key Features of Enums: . . . . . . . . . . . . . . . . . . . . . 22
10.2 For-each Loops: . . . . . . . . . . . . . . . . . . . . . . . . . . 23
11 Multi-Threading 25
11.1 Simulation as a Use Case for Multi-Threading: . . . . . . . . . 25
11.2 Java’s Approach to Multi-Threading: . . . . . . . . . . . . . . 25
11.3 Runnable Interface: . . . . . . . . . . . . . . . . . . . . . . . . 25
11.4 Creating Multiple Threads: . . . . . . . . . . . . . . . . . . . 25
11.5 Benefits of Multi-Threading: . . . . . . . . . . . . . . . . . . . 26
11.6 Challenges: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
12 VarArgs and Command Line Arguments 27
12.1 VarArgs (Variable Arguments): . . . . . . . . . . . . . . . . . 27
12.2 Command Line Arguments: . . . . . . . . . . . . . . . . . . . 27
12.3 Command Line Arguments for Dynamic Behavior: . . . . . . . 27
2
, 12.4 Conclusion: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
13 Unit Testing 29
13.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3
, 1 Modifiers
In Java, modifiers are keywords added to class, method, or variable definitions
to change their meanings. They play a pivotal role in adjusting the behaviour
and visibility of various elements like fields, classes, methods, and variables.
Broadly, modifiers can be categorised into two groups:
• Access Modifiers: Such as public and private, which control the
visibility of classes, methods, and variables.
• Non-Access Modifiers: Like final and static, which provide other
functionalities.
When a variable is designated as final, it means that once a value is
assigned to it, it cannot be altered. This immutability ensures data consis-
tency and integrity. It’s essential to assign a value to a final variable either
directly or via the constructor.
1.1 Illustrative Example:
For instance, consider a class Individual where the yearOfBirth is marked
as final. Once an Individual object is created with a specific birth year, it
cannot be changed.
1 class Individual {
2 final int yearOfBirth ;
3 Individual ( int yearOfBirth ) {
4 this . yearOfBirth = yearOfBirth ;
5 }
6 }
Listing 1: Final variable example in Java
In the advanced programming landscape, terms like public, static, and
final hold special significance. Specifically:
• public ensures universal accessibility.
• static indicates the element belongs to the class rather than any in-
stance.
• final denotes immutability.
4