Sprint Summary for JAVA-111

Modified on Mon, 10 Jun at 11:49 AM

Index:

  1. Operators

  2. Conditionals

  3. Arrays

  4. Type casting

  5. Loops

  6. Strings

  7. Command Line Arguments

  8. Collections

  9. Classes

  10. Keywords

  11. Integer class

  12. Java System, Packages, and Libraries


Topic 1: Operators


Logical Operators

Logical operators in Java are symbols or keywords that are used to perform logical operations on boolean values (true or false). They allow you to combine and manipulate boolean expressions to make decisions in your code.

Logical operators are used in various situations where you need to evaluate multiple conditions and make decisions based on their results. They are commonly used in control flow statements such as if statements, while loops, and for loops.

Common Logical Operators in Java:

    AND operator (&&): Returns true if both operands are true.
    Example: if (condition1 && condition2) { // do something }

    OR operator (||): Returns true if at least one of the operands is true.
    Example: if (condition1 || condition2) { // do something }

    NOT operator (!): Returns the opposite boolean value of the operand.
    Example: if (!condition) { // do something }

Takeaways / Best practices:

    1. Use logical operators to combine and evaluate boolean conditions in your code.
    2. Group conditions using parentheses for clarity and to ensure the desired evaluation order.


Ternary Operators

Ternary operators in Java are a concise way to evaluate boolean expressions and return one of two values based on the evaluation. They are an alternative to simple if-else statements and can make your code more readable and compact when used appropriately.

Ternary operators are used in situations where you need to choose between two values based on a condition. They are particularly useful for simple conditional assignments and expressions.

The Ternary Operator in Java:

Ternary Operator (?:): Evaluates a boolean expression and returns one of two values depending on whether the expression is true or false.

Example: result = condition ? value1: values2;

Takeaways / Best practices:


  1. Use ternary operators for simple conditional assignments. They can make your code more concise and readable when the condition and expressions are simple.

  2. For more complicated conditions and expressions, prefer using if-else statements for better readability and maintainability.

  3. To ensure clarity and the desired evaluation order, use parentheses when necessary.


Ternary Operators

Ternary operators in Java are a concise way to evaluate boolean expressions and return one of two values based on the evaluation. They are an alternative to simple if-else statements and can make your code more readable and compact when used appropriately.

Ternary operators are used in situations where you need to choose between two values based on a condition. They are particularly useful for simple conditional assignments and expressions.

The Ternary Operator in Java:

Ternary Operator (?:): Evaluates a boolean expression and returns one of two          values depending on whether the expression is true or false.

Example: result = condition ? value1: values2;

Takeaways / Best practices:


  1. Use ternary operators for simple conditional assignments. They can make your code more concise and readable when the condition and expressions are simple.

  2. For more complicated conditions and expressions, prefer using if-else statements for better readability and maintainability.

  3. To ensure clarity and the desired evaluation order, use parentheses when necessary.


Topic 2: Conditional Statements


If-Else Condition


If-else conditions in Java are control flow statements that allow you to execute different blocks of code based on a certain condition.

If-else conditions are widely used in Java programming to make decisions and control the flow of execution based on the evaluation of a boolean expression.

Common use of If-Else in Java:

  • An if statement is used to evaluate a condition. 

    • If the condition is true, the code block inside the if statement is executed. 

    • If the condition is false, the code block is skipped.

  • An optional else statement can follow the if statement. If the condition in the if statement is false, the code block inside the else statement is executed.

Code Snippet:


int num = 10;

if (num > 0) {
    System.out.println("The number is positive.");
} else if (num < 0) {
    System.out.println("The number is negative.");
} else {
    System.out.println("The number is zero.");
}


Takeaways / Best practices:

  • Use if-else conditions to make decisions based on conditions

  • Ensure that the condition in the if statement evaluates to a boolean value (true or false

  • Pay attention to the order of conditions when using else if statements, as they are evaluated sequentially.


Nested If-Else Condition

Nested if-else conditions in Java refer to the usage of an if-else statement inside another if-else statement, allowing for more complex decision-making based on multiple conditions.

Nested if-else conditions are used when you need to evaluate additional conditions within a specific branch of an if-else statement.

Common use of Nested If-Else in Java:

  • An outer if statement is used to evaluate a condition. If the condition is true, the code block inside the if statement is executed

  • Within the code block of the outer if statement, an inner if statement can be placed to evaluate an additional condition. 

    • If the condition in the inner if statement is true, the code block inside it is executed. 

    • If the condition is false, the code block inside the inner else statement (if present) is executed.


Code Snippet:

int num = 10;

if (num > 0) {
    System.out.println("The number is positive.");
    if (num % 2 == 0) {
        System.out.println("The number is even.");
    } else {
        System.out.println("The number is odd.");
    }
} else {
    System.out.println("The number is non-positive.");
}


Takeaways / Best practices:

  • Use nested if-else conditions when you need to evaluate additional conditions within a specific branch of an if-else statement

Ensure proper indentation and formatting to enhance code readability, especially when dealing with multiple levels of nesting.


Switch Statement

A switch statement in Java is a control flow statement used to select and execute a block of code from multiple options based on the value of an expression.

Switch statements are commonly used when you have a single expression that you want to compare against multiple possible values.

Here's how a switch statement is typically used:

  • Declare a switch statement using the switch keyword, followed by the expression to be evaluated

  • Define multiple case statements within the switch block, each representing a specific value that the expression can take

  • Write the code to be executed for each case within the corresponding case block

  • Optionally, include a default case to specify the code to be executed when none of the previous cases match the expression value

  • Terminate each case block with the break statement to prevent fall-through to subsequent cases.


Code snippet:

int day = 3;
String dayName;

switch (day) {
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    case 4:
        dayName = "Thursday";
        break;
    case 5:
        dayName = "Friday";
        break;
    default:
        dayName = "Invalid day";
        break;
}

System.out.println("The day is: " + dayName);


Takeaways / Best practices


  • Use switch statements when you have a single expression to compare against multiple possible values

  • Include a default case to handle unexpected or unmatched values

  • Use the break statement to prevent fall-through to subsequent cases



Topic 3: Arrays



Arrays in Java

Arrays in Java are data structures that store a fixed-size sequence of elements of the same type, allowing efficient access and manipulation of the elements.

Arrays are commonly used when you need to work with a collection of elements of the same type, such as a list of numbers, strings, or objects.

Here's how arrays are typically used in Java:


  • Declare an array by specifying the type of elements it will hold, followed by square brackets ([]) and the array name

  • Initialize the array by assigning it a specific size using the new keyword, followed by the type and the size within square brackets

  • Assign values to individual elements of the array using indexing, where the first element has an index of 0

  • Access the elements of the array using indexing, and perform operations or retrieve values as needed

  • Iterate over the elements of the array using loops, such as the for loop or the enhanced for loop

  • Utilize various array methods, such as length to determine the size of the array and Arrays.toString() to obtain a string representation of the array.


Code snippet:

int[] numbers = new int[5];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;

System.out.println("Array length: " + numbers.length); //OUTPUT- Array length: 5

for (int i = 0; i < numbers.length; i++) {
    System.out.println("Element at index " + i + ": " + numbers[i]);
}


Takeaways / Best practices

  • Declare the array with the appropriate type and size

  • Initialize the array before accessing or modifying its elements

  • Be cautious with array indices to avoid index out-of-bounds errors

  • Use loops to iterate over array elements efficiently


2D-Arrays


A 2D array in Java is a data structure that represents a matrix or grid of elements arranged in rows and columns.

2D arrays are used when you need to work with a table-like structure or when you have data that can be organized in a two-dimensional grid.

Here's how a 2D array is typically used in Java:

  • Declare a 2D array by specifying the type of elements it will hold, followed by square brackets ([][]) and the array name

  • Initialize the 2D array by providing the dimensions (number of rows and columns) using the new keyword

  • Assign values to individual elements of the 2D array using row and column indices

  • Access the elements of the 2D array using row and column indices, and perform operations or retrieve values as needed

  • Iterate over the elements of the 2D array using nested loops, such as the nested for loop

  • Utilize the length property of the array to determine the size of the rows and columns.

Code snippet:

int[][] matrix = new int[3][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
matrix[2][0] = 7;
matrix[2][1] = 8;
matrix[2][2] = 9;

System.out.println("Element at (1, 1): " + matrix[1][1]);

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

/*

OUTPUT-

1 2 3

4 5 6

7 8 9

*/

```

Takeaways / Best practices:

  • Declare and initialize the 2D array with the appropriate dimensions

  • Assign values to individual elements using row and column indices

  • Access and manipulate elements using row and column indices

  • Use nested loops to iterate over the elements of the 2D array

  • Be cautious with array indices to avoid index out-of-bounds errors

  • Utilize the length property to determine the size of the rows and columns


Topic 4: Type Casting


Implicit Casting (Widening)

Implicit casting occurs when a smaller data type is automatically converted to a larger data type. This type of casting is done by the Java compiler and does not require any special syntax.

Common Implicit Casting:

  • byte to shortintlongfloat, or double

  • short to intlongfloat, or double

  • char to intlongfloat, or double

  • int to longfloat, or double

  • long to float or double

  • float to double


Example:


int myInt = 9;

double myDouble = myInt;  // Automatic casting: int to double

System.out.println(myDouble);  // Outputs 9.0

Takeaways / Best practices:

  • When moving from a smaller to a larger data type, implicit casting is safe and handled by the compiler.

  • When combining type casting with other operations, use parentheses to ensure the correct evaluation order and enhance readability.


Explicit Casting (Narrowing)


Explicit casting occurs when a larger data type is manually converted to a smaller data type. This type of casting requires the use of a cast operator.

Common Explicit Casting:

  • double to floatlongintshort, or byte

  • float to longintshort, or byte

  • long to intshort, or byte

  • int to short or byte

  • short to byte


Example


double myDouble = 9.78;

int myInt = (int) myDouble;  // Manual casting: double to int

System.out.println(myInt);  // Outputs 9


Takeaways / Best practices:

  • When converting from a larger to a smaller data type, ensure that the value fits within the target type's range to avoid data loss.

  • When combining type casting with other operations, use parentheses to ensure the correct evaluation order and enhance readability.


Topic 5: Loops


For Loops

A for loop in Java is a control flow statement used to repeatedly execute a block of code a specific number of times or iterate over elements in a collection.

For loops are used when you know the exact number of iterations or when you need to traverse through a sequence of elements.

Here's how a for loop is typically used in Java


  • Declare and initialize a loop variable.

  • Specify the condition for executing the loop, which is evaluated before each iteration. If the condition is true, the loop continues; otherwise, it terminates

  • Define the update statement that modifies the loop variable after each iteration

  • Write the code block to be executed within the for loop.

Code snippet:


for (int i = 1; i <= 5; i++) {
    System.out.println("Iteration: " + i);
}


Takeaways / Best practices:

  • Use a for loop when you know the number of iterations or need to iterate over a collection

  • Declare the loop variable within the for loop's initialization statement

  • Specify the loop condition to determine when the loop should terminate

  • Include the update statement to modify the loop variable after each iteration


Break & Continue Statements


Break and continue statements in Java are control flow statements used to alter the flow of execution within loops (for, while, and do-while).

Break statement:

  • Used to terminate the loop or switch statement prematurely

  • It is used when you want to exit a loop or switch statement before its normal completion

  • When encountered, the control flow immediately exits the loop or switch statement, and the program continues executing the next statement after the loop or switch.

Continue statement:

  • Used to skip the rest of the loop iteration and move to the next iteration

  • It is used when you want to bypass the remaining code in the current iteration and proceed to the next iteration of the loop

  • When encountered, the control flow jumps to the next iteration of the loop without executing the remaining code within the loop body.

Code snippet for break and continue:

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        break; // Terminates the loop when i equals 3
    }
    System.out.println("Iteration: " + i);
}

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue; // Skips the current iteration when i equals 3
    }
    System.out.println("Iteration: " + i);
}


Takeaways / Best practices:

  • Use the break statement when you want to exit a loop or switch statement prematurely

  • Use the continue statement when you want to skip the rest of the current iteration and move to the next iteration of the loop

  • Be cautious with the usage of break and continue statements to ensure they are applied appropriately, as misuse can lead to unexpected or undesired behavior


While Loops


A while loop in Java is a control flow statement used to repeatedly execute a block of code as long as a given condition is true.

While loops are used when the number of iterations is unknown and determined by a condition that is evaluated before each iteration.

Here's how a while loop is typically used in Java:

  • Initialize any necessary variables before entering the while loop

  • Specify the condition that determines whether the loop should continue or terminate

  • Write the code block to be executed within the while loop

  • Update the loop control variable(s) inside the loop to ensure the termination condition will eventually be met

  • Be cautious to avoid infinite loops by ensuring the termination condition will eventually become false.

Code snippet:

int count = 0;
while (count < 5) {
    System.out.println("Count: " + count);
    count++;
}


Takeaways / Best practices:

  • Use a while loop when the number of iterations is unknown and depends on a condition.
        Initialize loop control variables before the while loop

  • Specify the condition carefully to ensure the loop will eventually terminate

  • Update loop control variables inside the loop to progress towards the termination condition

  • Be cautious to avoid infinite loops by ensuring the termination condition will eventually become false.

Nested For Loop


A nested for loop in Java is a loop structure that contains another loop inside its body, allowing for iteration over multiple dimensions or nested structures.

Nested for loops are used when you need to iterate over elements in multiple dimensions, such as iterating through a 2D array or nested collections.

Here's how a nested for loop is typically used in Java:

  1. Declare and initialize the outer loop control variable

  2. Specify the condition for the outer loop to determine when it should continue or terminate

  3. Declare and initialize the inner loop control variable inside the outer loop

  4. Specify the condition for the inner loop to determine when it should continue or terminate

  5. Write the code block to be executed within the nested for loop

  6. Update the loop control variables for both the outer and inner loops to progress towards the termination conditions.


Code snippet:


for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        System.out.println("Outer loop iteration: " + i);
        System.out.println("Inner loop iteration: " + j);
    }
}


Takeaways / Best practices:

  1. Use nested for loops when you need to iterate over multiple dimensions or nested structures

  2. Initialize and update the loop control variables for both the outer and inner loops



Topic 6: Strings


Strings in Java

A string in Java is a sequence of characters that represents textual data. It is a built-in data type and is widely used for storing and manipulating text in Java programs.

Strings are used in Java for various purposes, such as:

  1. Storing and manipulating text data

  2. Displaying messages or user inputs

  3. Working with file paths or URLs

  4. Interacting with databases and external systems.

Here's how strings are typically used in Java:

  1. Declare a string variable by specifying the data type as String

  2. Assign a value to the string variable using either a string literal or by invoking the String class constructor

  3. Use various string methods to perform operations like concatenation, comparison, substring extraction, length calculation, etc

  4. Strings can be concatenated using the + operator


Code snippet:

String message = "Hello, World!"; // String declaration and assignment
System.out.println(message); // Output: Hello, World!

String firstName = "John";
String lastName = "Doe";
String fullName = firstName + " " + lastName; // String concatenation
System.out.println(fullName); // Output: John Doe

Takeaways / Best practices:

  1. Strings are widely used for handling text data in Java

  2. Use the String class to declare and manipulate strings

  3. Strings in Java are immutable, meaning they cannot be changed once created.


String Concatenation


String concatenation in Java refers to the process of combining multiple strings together to create a new string.

String concatenation is used when you need to merge strings to form a larger string, such as creating dynamic messages, generating output, or constructing file paths.

Here's how string concatenation is typically done in Java:

  1. Use the concatenation operator (+) to join two or more strings together

  2. Place the concatenation operator between the strings that you want to combine

  3. The order of the strings determines the order in which they will appear in the resulting concatenated string

  4. You can also concatenate strings with other data types by implicitly converting them to strings using their toString() method or using the valueOf() method explicitly.


Code snippet:

String firstName = "John";
String lastName = "Doe";

String fullName = firstName + " " + lastName;
System.out.println("Full Name: " + fullName);

int age = 30;
String message = "My name is " + fullName + " and I am " + age + " years old.";
System.out.println(message);

Takeaways / Best practices:

  1. Use the concatenation operator (+) to join strings together

  2. Be mindful of spaces or separators needed between concatenated strings by including them as part of the concatenation.


String Comparison

String comparison in Java refers to the process of comparing two strings to determine their relative order or equality. It is used to check if two strings are equal or to determine the lexicographical ordering of strings.

String comparison is used in various scenarios, including:

  1. Validating user input or verifying expected values

  2. Sorting strings in ascending or descending order

  3. Implementing search algorithms or data structures that require string comparison.

Here's how string comparison is typically done in Java:

  1. Use the equals() method to check if two strings have the same content

  2. The equals() method returns a boolean value (true if the strings are equal, false otherwise

Code snippet:

String str1 = "apple";
String str2 = "banana";

boolean isEqual = str1.equals(str2); // String equality check
System.out.println("Are the strings equal? " + isEqual);


Takeaways / Best practices:

  1. Use the equals() method for string equality checks

  2. Be mindful of case sensitivity when using string comparison methods. Consider using equalsIgnoreCase() for case-insensitive comparisons.


StringBuilder Class


What is it?


StringBuilder in Java is a mutable sequence of characters, which is used for creating and manipulating dynamic string data.


Where is it used?


  1. It's typically used in situations where you need to make numerous modifications to strings of characters. 

  2. This could be anything from appending, inserting, replacing, or deleting characters or substrings within a string.


How is it used?


  1. Declare a StringBuilder instance: StringBuilder sb = new StringBuilder();

  2. Use append() to add characters or strings: sb.append("Hello, ");

  3. Further modify the StringBuilder: sb.append("World!");

  4. Convert the StringBuilder back to a String when needed: String str = sb.toString();


Code Snippet:


StringBuilder sb = new StringBuilder();

sb.append("Hello, ");
sb.append("World!");

String str = sb.toString();
System.out.println(str); // Prints: Hello, World!


Takeaways / best practices


  1. StringBuilder is much more efficient than String when doing numerous string modifications. 

    • This is because String objects are immutable in Java, meaning each time you modify a String, a new object is created, which can lead to a significant performance hit if modifications are frequent.

  2. Always convert your StringBuilder back to a String if you need to pass it to a method that expects a String. This is because StringBuilder and String are not interchangeable.


Topic 7: Command Line Arguments


Command line arguments in Java allow you to pass information to your program when it starts. These arguments can be used to influence the program's behavior without changing its source code. They are particularly useful for configuring program settings or passing input data.


Command line arguments are passed to the main method of your Java program, which is defined as:


public static void main(String[] args)


The args parameter is an array of String objects that stores the arguments passed from the command line.


Accessing Command Line Arguments

To access command line arguments, you can iterate over the `args` array and process each argument as needed.


Example


public class CommandLineExample {

    public static void main(String[] args) {

        if (args.length > 0) {

            System.out.println("Command line arguments:");

            for (int i = 0; i < args.length; i++) {

                System.out.println("Argument " + i + ": " + args[i]);

            }

        } else {

            System.out.println("No command line arguments found.");

        }

    }
}


In this example, the program checks if any arguments are passed. If so, it prints each argument with its index; otherwise, it indicates that no arguments were provided.


Running the Program with Arguments

To run the program with command line arguments, you can use the following syntax from the command line:


java CommandLineExample arg1 arg2 arg3


This will pass "arg1", "arg2", and "arg3" to the `main` method.


Takeaways / Best practices:


1. Always check if the required arguments are provided and validate their values to avoid runtime errors.

2.  If the arguments are not provided correctly, display a helpful message to guide the user on the correct usage.

3. When processing command line arguments, use meaningful variable names to enhance code readability and maintainability.


Topic 8: Collections


ArrayList


ArrayList in Java is a dynamic array-like data structure that allows storing and manipulating a collection of elements. It provides a flexible way to store and access objects of any type.

ArrayList is commonly used in the following scenarios:

  1. When the size of the collection is not known in advance and needs to grow or shrink dynamically

  2. When you need to store and access a group of objects efficiently

  3. When you want to perform operations like adding, removing, or accessing elements at specific positions in the list.

Here's how ArrayList is typically used in Java:

  1. Declare an ArrayList by specifying the type of objects it will hold within angle brackets, followed by the variable name

  2. Create an instance of ArrayList using the new keyword or by invoking the ArrayList constructor

  3. Add elements to the ArrayList using the add() method

  4. Access elements by their index using the get() method

  5. Modify elements by their index using the set() method

  6. Remove elements by their index or by the object itself using the remove() method

  7. Check the size of the ArrayList using the size() method

  8. Iterate over the elements using for-each loop or the Iterator interface

  9. Use other utility methods like contains(), indexOf(), isEmpty(), etc., to perform common operations.


Code snippet:

import java.util.ArrayList;

// Declare and create an ArrayList of Strings
ArrayList<String> fruits = new ArrayList<>();

// Add elements to the ArrayList
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");

// Access an element by index
String firstFruit = fruits.get(0);
System.out.println("First fruit: " + firstFruit);

// Modify an element by index
fruits.set(1, "Mango");

// Remove an element by index
fruits.remove(2);

// Check the size of the ArrayList
int size = fruits.size();
System.out.println("Size of the list: " + size);

// Iterate over the elements
for (String fruit : fruits) {
    System.out.println(fruit);
}

Takeaways / Best practices:

  1. ArrayList provides a flexible way to store and manipulate a collection of elements.

  2. ArrayList dynamically grows or shrinks based on the number of elements added or removed.


HashMaps


HashMap in Java is a data structure that stores key-value pairs and provides efficient retrieval and insertion operations. It allows you to associate a value with a unique key, enabling fast access to values based on their corresponding keys.

HashMap is commonly used in the following scenarios:

  1. When you need to store and retrieve data based on a unique identifier (key

  2. When you want to perform operations like adding, removing, or accessing elements in constant time complexity

  3. When you need a flexible data structure that can dynamically grow or shrink based on the number of elements.

Here's how HashMap is typically used in Java


  1. Declare a HashMap by specifying the types of the key and value within angle brackets, followed by the variable name

  2. Create an instance of HashMap using the new keyword or by invoking the HashMap constructor

  3. Add key-value pairs to the HashMap using the put() method

  4. Retrieve a value by its key using the get() method

  5. Remove a key-value pair using the remove() method

  6. Check if a key exists in the HashMap using the containsKey() method



Code snippet:

import java.util.HashMap;

// Declare and create a HashMap with Integer keys and String values
HashMap<Integer, String> students = new HashMap<>();

// Add key-value pairs to the HashMap
students.put(1, "Alice");
students.put(2, "Bob");
students.put(3, "Charlie");

// Retrieve a value by its key
String bob = students.get(2);
System.out.println("Student with key 2: " + bob);

// Remove a key-value pair
students.remove(3);

// Check if a key exists in the HashMap
boolean hasKey = students.containsKey(3);
System.out.println("Has key 3: " + hasKey);


Takeaways / Best practices


  1. HashMap provides efficient storage and retrieval of key-value pairs

  2. Choose appropriate key types that provide uniqueness and good hashing properties

  3. Use the put() method to add key-value pairs and the get() method to retrieve values based on keys

  4. Use the remove() method to delete key-value pairs


HashSets

HashSet in Java is a collection that stores unique elements, providing efficient membership testing and insertion operations. It does not guarantee the order of elements and allows only one null element.

HashSet is commonly used in the following scenarios:

  1. When you need to store a collection of elements without duplicates

  2. When you want to perform operations like adding, removing, or checking the presence of elements in constant time complexity

  3. When the order of elements is not important.


Here's how HashSet is typically used in Java:

  1. Declare a HashSet by specifying the type of elements within angle brackets, followed by the variable name

  2. Create an instance of HashSet using the new keyword or by invoking the HashSet constructor

  3. Add elements to the HashSet using the add() method

  4. Check if an element exists in the HashSet using the contains() method

  5. Remove an element from the HashSet using the remove() method.


Code snippet:

import java.util.HashSet;

// Declare and create a HashSet of Strings
HashSet<String> fruits = new HashSet<>();

// Add elements to the HashSet
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");

// Check if an element exists
boolean containsApple = fruits.contains("Apple");
System.out.println("Contains Apple: " + containsApple); //OUTPUT- Contains Apple: true


// Add same element again

fruits.add("Orange");

System.out.println(fruits.size()); //OUTPUT- 3 (remains the same)


// Remove an element
fruits.remove("Banana");

Takeaways / Best practices:

  1. HashSet stores unique elements, eliminating duplicates automatically

  2. Use generics to specify the type of elements that the HashSet will hold

  3. Consider the equality and hash code implementation of the element type for correct behavior

  4. Use the add() method to insert elements into the HashSet

  5. Use the contains() method to check if an element exists in the HashSet

  6. Use the remove() method to delete an element from the HashSet.


Topic 9: Classes in Java


Classes in Java

A class in Java is a blueprint or template that defines the properties and behavior of objects. It serves as a blueprint for creating instances (objects) of that class.

Classes are used in Java to create objects that encapsulate data and provide methods to operate on that data. They are the building blocks of object-oriented programming.

Here's how a class is typically used in Java:

  1. Declare a class by specifying the keyword class, followed by the class name

  2. Define the attributes (fields) that represent the data associated with the class

  3. Provide constructors to initialize the object with initial values

  4. Write methods (functions) that define the behavior and operations that can be performed on objects of the class

  5. Create objects (instances) of the class using the new keyword and the class 

  6. Access the attributes and invoke methods on the objects using the dot notation (objectName.attribute or objectName.method()).


Code snippet:

class Car {
    String brand;
    String color;
    int year;

    public Car(String brand, String color, int year) {
        this.brand = brand;
        this.color = color;
        this.year = year;
    }

    public void startEngine() {
        System.out.println("Engine started for " + brand);
    }

    public void drive() {
        System.out.println("Driving the " + brand + " car");
    }
}

Car myCar = new Car("Toyota", "Red", 2021);
myCar.startEngine();
myCar.drive();


Takeaways / Best practices:

  1. Classes are used to encapsulate related data and behavior into objects

  2. Choose meaningful and descriptive names for classes to reflect their purpose and role in the system.


Methods in Java

A method in Java is a block of code that performs a specific task and can be called or invoked to execute that task.

Methods are used in Java to organize and encapsulate reusable code, improve code modularity, and promote code reusability.

Here's how a method is typically used in Java:

  1. Declare a method by specifying the access modifier (e.g., public, private), return type (e.g., void, int, String), method name, and parameters (if any

  2. Write the code block inside the method that defines the task or operations to be performedIf the method has parameters, provide the necessary values when calling the method

  3. Call or invoke the method by using the method name followed by parentheses. If the method has a return type, you can assign the returned value to a variable or use it in an expression

  4. The control flow transfers to the method body, executes the code inside the method, and returns back to the calling code after the method completes its execution.


Code snippet:

public class MathUtils {
    public static int add(int num1, int num2) {
        return num1 + num2;
    }

    public static void main(String[] args) {
        int result = add(5, 3);
        System.out.println("Addition result: " + result);
    }
}


Takeaways / Best practices


  1. Methods help break down complex tasks into smaller, manageable units of code

  2. Use meaningful names for methods that reflect their purpose or the task they perform

  3. Methods can have return types (e.g., int, String) or be void (no return value).


Constructors in Java


A constructor in Java is a special method that is used to initialize objects of a class. It is called automatically when an object is created and ensures that the object is properly initialized.

Constructors are used in Java to set initial values to the instance variables of an object, perform any necessary setup tasks, and ensure the object is in a valid state upon creation.

Here's how a constructor is typically used in Java:

  1. Declare a constructor by using the same name as the class

  2. Define the parameters, if any, that are required to initialize the object

  3. Write the code block inside the constructor that initializes the instance variables or performs any necessary setup tasks

  4. When creating an object, use the new keyword followed by the constructor name and provide any required arguments

  5. The constructor is called automatically, and the object is initialized based on the constructor's code.


Code snippet:

public class Car {
    String brand;
    String color;

    public Car(String brand, String color) {
        this.brand = brand;
        this.color = color;
    }

    public void startEngine() {
        System.out.println("Engine started for " + brand);
    }

    public static void main(String[] args) {
        Car myCar = new Car("Toyota", "Red");
        myCar.startEngine();
    }
}


Takeaways / Best practices:

  1. Constructors are used to initialize objects and ensure they are in a valid state upon creation

  2. Use the constructor to set initial values to instance variables or perform necessary setup tasks

  3. Constructors have the same name as the class and can have parameters

If no constructor is explicitly defined, Java provides a default constructor with no parameters.


Topic 10: Keywords


Keywords in Java are reserved words that have a predefined meaning in the language. They cannot be used as identifiers (names for variables, methods, classes, etc.) because they are part of the language's syntax. Keywords are fundamental to writing Java programs as they define the structure and flow of the code.


Java has a set of keywords that serve various purposes, such as defining data types, controlling program flow, and handling exceptions.


Common Keywords in Java

Here are some of the most commonly used keywords in Java:


  • Data Type Keywords: `int`, `float`, `double`, `char`, `boolean`, `byte`, `short`, `long`

Example: `int number = 10;`


  • Control Flow Keywords: `if`, `else`, `switch`, `case`, `default`, `for`, `while`, `do`, `break`, `continue`

Example: 

 

if (condition) {

 // do something

} else {

// do something else

}


  •  Access Modifiers: `public`, `private`, `protected`

Example:


public class MyClass {

      private int myVar;

}


  • Class and Object Keywords: `class`, `interface`, `extends`, `implements`, `new`, `this`, `super`

Example:


public class MyClass extends ParentClass {

public MyClass() {

          super();

      }
}


  • Exception Handling Keywords: `try`, `catch`, `finally`, `throw`, `throws`

Example:


try {

      // code that may throw an exception

  } catch (Exception e) {

      // handle exception

  } finally {

      // code to be executed after try/catch

  }


  • Miscellaneous Keywords: `import`, `package`, `return`, `void`, `static`, `final`, `abstract`, `synchronized`, `volatile`

 Example:


import java.util.ArrayList;

public static void main(String[] args) {

 // code

}


Takeaways / Best practices:


1. Familiarize yourself with the keywords and their usage to write correct and efficient Java programs.

2. Since keywords have special meanings, using them as names for variables, methods, or classes will result in compilation errors.

3. Follow Java naming conventions for identifiers to ensure clarity and maintainability of your code.


Topic 11: Integer Class in Java


The Integer class in Java is a wrapper class that allows you to use and manipulate integer values as objects. It provides methods to perform various operations on integers and convert them to different data types.

The Integer class is used in the following scenarios:

  1. When you need to treat an integer as an object, such as when working with collections or generics that require object types

  2. When you need to perform operations like parsing, converting, or formatting integers.


Here's how the Integer class is typically used in Java:

  1. Declare an Integer object by specifying the class name followed by the variable name

  2. Assign a value to the Integer object using either a constructor or the valueOf() method


Code snippet:

Integer num1 = new Integer(10); // Creating an Integer object using a constructor
Integer num2 = Integer.valueOf("20"); // Creating an Integer object using valueOf()


Takeaways / Best practices:

  1. The Integer class provides a way to work with integer values as objects

  2. Use the Integer class when you need to treat integers as objects or when working with collections or generics.


Topic 12: Java System & Libraries


Packages and Imports


What is it?


In Java, a package is a namespace for organizing classes and interfaces in a logical manner, while an import statement is used to bring in code from different packages into the current file for use.


Where is it used?


Packages and imports are used throughout Java programming to manage and organize large codebases and to reuse code across multiple files or applications.


How is it used?


  1. Create a package: Packages are defined at the top of a Java file with the package keyword followed by a unique package name: package com.mycompany.myapp;

  2. Add classes to a package: Any classes or interfaces defined in the file are part of the package.

  3. Import a package: Use the import keyword at the top of a Java file to bring in a class or an entire package: import java.util.ArrayList; or import java.util.*;

  4. Use imported classes: After importing, you can use the classes and interfaces in your code.


Code Snippet:


MyClass.java

package com.mycompany.myapp;

public class MyClass {

    public void printMessage() {

        System.out.println("Hello from MyClass!");

    }

}

Test.java

import com.mycompany.myapp.MyClass;

public class Test {

    public static void main(String[] args) {

        MyClass myClass = new MyClass();

        myClass.printMessage(); // prints: Hello from MyClass!

    }

}


Takeaways / best practices


  1. Use packages to avoid naming conflicts and to write better maintainable code.

  2. Use meaningful package names in lower case. Typically companies use their reversed Internet domain name to begin their package names—for example, com.example.mypackage for a package named "mypackage" created by a programmer at "example.com".


The Math Library

The Math library in Java provides a set of predefined mathematical functions and constants for performing common mathematical operations.

The Math library is used in various scenarios where mathematical calculations are required, such as scientific calculations, numerical analysis, geometry, and more.

Here's how the Math library is typically used in Java:

  1. Import the Math class in your Java program using the import statement: import java.lang.Math

  2. Access the mathematical functions and constants provided by the Math class using the dot notation, for example, Math.sqrt() for calculating the square root

  3. Use the various methods available in the Math class to perform mathematical operations, such as trigonometric functions (sin(), cos(), tan()), logarithmic functions (log(), log10()), exponential functions (exp(), pow()), rounding functions (round(), ceil(), floor()), and more.


Code snippet:

import java.lang.Math;

public class MathExample {
    public static void main(String[] args) {
        // Calculate the square root of a number
        double squareRoot = Math.sqrt(25);
        System.out.println("Square root of 25: " + squareRoot);

        // Calculate the sine of an angle
        double sineValue = Math.sin(Math.toRadians(30));
        System.out.println("Sine of 30 degrees: " + sineValue);

        // Round a number to the nearest integer
        int roundedValue = Math.round(3.7f);
        System.out.println("Rounded value: " + roundedValue);
    }
}


Takeaways / Best practices:

  1. Import the Math class to use the functions and constants provided by the library

  2. Ensure that the required arguments for the methods are correctly provided

  3. Be aware of the data types used in calculations to ensure accurate results.


JVM-JDK-JRE


JVM (Java Virtual Machine), JDK (Java Development Kit), and JRE (Java Runtime Environment) are essential components of the Java platform that enable the execution and development of Java applications.

Here's a breakdown of each component:

  1. JVM (Java Virtual Machine

    • JVM is an abstract machine that provides an execution environment for Java applications

    • It interprets and executes Java bytecode, which is generated by the Java compiler from Java source code

    • JVM is responsible for various tasks such as memory management, garbage collection, and platform independence

    • It acts as a bridge between the Java application and the underlying hardware or operating system

  2. JDK (Java Development Kit

    • JDK is a software development kit that includes tools and libraries necessary for developing Java applications

    • It consists of the Java compiler, which translates Java source code into bytecode, and other development tools like debugger, profiler, and documentation generator

    • JDK also includes a set of class libraries, known as the Java API (Application Programming Interface), that provides pre-written code for common functionalities

  3. JRE (Java Runtime Environment

    • JRE is a subset of the JDK and is required to run Java applications

    • It includes the JVM and a set of class libraries that are necessary for executing Java programs

    • JRE does not include the development tools present in the JDK

    • End-users who only need to run Java applications on their systems typically install the JRE.


Usage of JVM, JDK, and JRE:

  1. JVM is used to execute Java bytecode and run Java applications on various platforms, including desktops, servers, and mobile devices

  2. JDK is used by developers to write, compile, and debug Java code. It provides the necessary tools and libraries for Java application development

  3. JRE is used by end-users to run Java applications without the need for development tools.


Takeaways / Best practices:

  1. Install the appropriate JDK version based on your development needs

  2. Set up the environment variables (e.g., PATH variable) to point to the JDK and JRE installations

  3. Use the JDK to compile your Java source code into bytecode using the javac command

  4. Run Java applications using the JRE by executing the bytecode with the java command

  5. Ensure that the JVM version matches the required Java version for your application.

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article