Skip to main content

Socket (TCP & UDP) communication in Java

Socket communication in Java enables communication between two endpoints over a network. There are two main types of sockets: TCP sockets and UDP sockets. Let's explain both types with examples: TCP Socket Communication: 1. **Server Side**:    - The server creates a `ServerSocket` object to listen for incoming connections on a specific port.    - When a client connects, the server accepts the connection and creates a `Socket` object to communicate with the client.    - The server reads from and writes to the socket's input and output streams to communicate with the client. import java.io.*; import java.net.*; public class TCPServer {     public static void main(String[] args) throws IOException {         ServerSocket serverSocket = new ServerSocket(12345);         System.out.println("Server started. Waiting for client...");         Socket clientSocket = serverSocket.accept();         System.out.println("Client connected.");         BufferedReader in = new Bu

Anonymous inner class

Anonymous inner class

An anonymous inner class in Java is a class without a name that's defined and instantiated in a single expression. It's often used to create instances of classes that implement interfaces or extend classes without explicitly defining a new class.

Here's an example:

public class Main {

    interface Greeting {

        void greet();

    }


    public static void main(String[] args) {

        // Creating an anonymous inner class that implements the Greeting interface

        Greeting greeting = new Greeting() {

            @Override

            public void greet() {

                System.out.println("Hello from anonymous inner class!");

            }

        };


        // Invoking the method defined in the anonymous inner class

        greeting.greet();

    }

}

Explanation:

- In the example above, an anonymous inner class is created that implements the `Greeting` interface.

- The `greet()` method is overridden within the anonymous inner class to provide custom behavior.

- An instance of the anonymous inner class is created and assigned to a reference variable of the `Greeting` interface.

- Finally, the `greet()` method of the anonymous inner class instance is invoked.


Nested Class Vs Inner Class vs Anonymous inner class

Anonymous inner classes are particularly useful for event handling and callbacks in GUI programming, where you need to provide implementations for listener interfaces without defining separate named classes. They're concise and handy for one-off implementations of interfaces or subclasses of existing classes.


Nested Class:

- A nested class in Java is a class defined within another class.

- It can be static or non-static (also called inner class).

- A nested class has access to all members (fields and methods) of its enclosing class, including private members.

- It can access static members of the enclosing class directly.

- Nested classes are mainly used for logical grouping and better organization of code.


Inner Class:

- An inner class is a non-static nested class defined within another class.

- It has access to the instance variables and methods of its enclosing class.

- Inner classes can be of four types: member inner class, local inner class, anonymous inner class, and static nested class (which is technically an inner class but often referred to separately).

- They are useful for implementing callbacks, event handling, and providing encapsulation.


Anonymous Inner Class:

- An anonymous inner class is a type of inner class without a name and is declared and instantiated in a single expression.

- It's typically used for one-time use where a class definition is not needed.

- It's often used to override methods of a class or implement interfaces without explicitly defining a new named class.

- Anonymous inner classes are concise and useful for event handling and implementing interfaces with minimal code.


Comparison:

- Nested classes can be static or non-static, while inner classes are always non-static.

- Inner classes have access to the instance variables of their enclosing class, while nested classes do not.

- Anonymous inner classes are a special type of inner class that do not have a name and are declared and instantiated in a single expression.

- Nested classes and inner classes are explicitly defined in code, while anonymous inner classes are typically used for one-time implementations of interfaces or subclasses without defining a separate class.

Comments

Popular posts from this blog

Method Overloading in Java

Method Overloading in Java Method Overloading  is a feature in Java that allows a class to have multiple methods with the same name but different parameter lists. The methods can have a different number or types of parameters. The decision on which method to invoke is made by the compiler based on the arguments provided during the method call.  Example: public class Calculator {     // Method to add two integers     public int add(int a, int b) {         return a + b;     }     // Method to add three integers     public int add(int a, int b, int c) {         return a + b + c;     }     // Method to add two doubles     public double add(double a, double b) {         return a + b;     }     // Method to concatenate two strings     public String concatenate(String str1, String str2) {         return str1 + str2;     } } Method Overloading in Action: public class Main {     public static void main(String[] args) {         Calculator calculator = new Calculator();         // Overloaded meth

Java Runtime Environment (JRE)

Definition : Java Runtime Environment (JRE) is a set of software tools and libraries that enables the execution of Java applications. It provides the necessary runtime support for Java programs to run on various devices and platforms. Components of Java Runtime Environment (JRE): Java Virtual Machine (JVM): Definition: The JVM is a crucial component of the JRE responsible for executing Java bytecode. Functionality: It interprets Java bytecode or, in some cases, uses Just-In-Time (JIT) compilation to translate bytecode into native machine code for improved performance. Importance: JVM abstracts the underlying hardware, allowing Java programs to be platform-independent. Class Libraries: Definition: JRE includes a set of precompiled classes and methods that Java applications can utilize. Functionality: These classes cover a wide range of functionalities, from basic data structures to networking. Importance: Class libraries provide a foundation for developers, offering reusable code